NSFetchedResultsController委托方法调用谓词更改

foF*_*Fox 2 core-data uitableview nsfetchedresultscontroller ios

我有一个简单的应用程序,在那里我有拥有城市的国家,而这些城市又有人.我想在表格视图中显示国家/地区列表.我使用NSFetchedResultsController来获取所有数据.这是设置:

-(void)initializeFetchedResultsController
{
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"Country"];
    fetchRequest.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES]];
    fetchRequest.fetchBatchSize = 30;
    self.fetchResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
                                                                      managedObjectContext:[NSManagedObjectContext managedObjectContext]
                                                                        sectionNameKeyPath:@"nameFirstLetter"
                                                                                 cacheName:nil];
    self.fetchResultsController.delegate = self;
    [self.fetchResultsController performFetch:nil];
}
Run Code Online (Sandbox Code Playgroud)

我还通过在搜索栏中输入国家名称添加了搜索功能,因此我实现了UISearchBarDelegate方法:

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
{
    if([searchText isEqualToString:@""])
    {
        self.fetchResultsController.fetchRequest.predicate = nil;
    }
    else
    {
        self.fetchResultsController.fetchRequest.predicate = [NSPredicate predicateWithFormat:@"name BEGINSWITH[cd] %@", searchText];
    }

    [self.fetchResultsController performFetch:nil];
    [self.tableView reloadData];
}
Run Code Online (Sandbox Code Playgroud)

这可行,但不是我想要的方式.我期望在谓词更改时,我的NSFetchResultsControllerDelegate委托方法将再次被调用,因此我可以从我的表视图中插入或删除项目/部分(我想要动画),而不必弄清楚自己,已添加和删除的内容.但事实并非如此,相反,如果我更改谓词,则不会调用委托方法,我必须做一个简单的[self.tableView reloadData].我做错了什么,或者只是它的工作方式,我不能采取这种捷径?

Sti*_*and 5

你做错了.这就是它的方式,没有捷径可走.您必须实现自己的代码来为抓取之间的表视图设置动画.