Ios NSFetchedResultsControllerDelegate';在UISearchController';s searchResultsController

Ios NSFetchedResultsControllerDelegate';在UISearchController';s searchResultsController,ios,objective-c,core-data,nsfetchedresultscontroller,Ios,Objective C,Core Data,Nsfetchedresultscontroller,我正在尝试从UISearchDisplayController迁移到UISearchController,但是我很难在我的UISearchController的searchresultscoontroller中调用nsfetchedresultscoontrollerdelegate的方法UISearchController被实例化为: self.searchController = [[UISearchController alloc] initWithSearchResultsControl

我正在尝试从
UISearchDisplayController
迁移到
UISearchController
,但是我很难在我的
UISearchController
searchresultscoontroller
中调用
nsfetchedresultscoontrollerdelegate
的方法<代码>UISearchController被实例化为:

self.searchController = [[UISearchController alloc] initWithSearchResultsController:self.searchResultsViewController];
self.searchController.searchResultsUpdater = self.searchResultsViewController;
self.searchController.searchBar.frame = CGRectMake(0.0, 0.0, 320.0, 44.0); /* radr://17315477 */
self.tableView.tableHeaderView = self.searchController.searchBar;
self.definesPresentationContext = YES;
searchResultsController
是一个相当简单的样板文件
UITableViewController
self.searchResultsViewController
)。
UITableViewDataSource
方法都是从我的旧
UISearchDisplayController
复制过来的。例如:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
     return (self.searchFetchedResultsController.sections.count);
}
UITableViewController
既是
uisearchresultsupdated
又是
NSFetchedResultsControllerDelegate
。委托方法(没有被调用)是文档中的样板文件。我的
updateSearchResultsForSearchController:
也非常基本:

- (void)updateSearchResultsForSearchController:(UISearchController *)searchController
{
     if (!searchController.isActive)
          return;

     self.searchFetchedResultsController.delegate = self;
     self.searchFetchedResultsController.fetchRequest.predicate = [NSPredicate predicateWithFormat:@"%K contains[cd] %@", @"name", searchController.searchBar.text];

     NSError *error = nil;
     if (![self.searchFetchedResultsController performFetch:&error])
          NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
     NSLog(@"%@", @([self.searchFetchedResultsController.fetchedObjects count]));
}

我现在每次都设置委托,因为我的问题是在
performFetch
之后不会调用委托方法。我真的不知道还能看什么。我已经在调试器中确认委托在之前和之后都被设置,并且它被设置为正确的对象。
searchFetchedResultsController
lazy实例化未更改,并且没有要删除的缓存。打印fetchedObjets计数时,计数会更新并且是正确的。如果我在
性能测试
之后抛出
[self.tableView reloadData]
,一切看起来都是应该的,但我知道这不是一个好主意
NSFetchedResultsControllerDelegate
的方法没有被调用。是否有其他人看到类似的行为,或者我需要继续挖掘我的代码库?我可以查找哪些内容?

此处要做的适当操作是调用
UITableView
重新加载数据
,或者在更改
fetchRequest.predicate
后添加/删除更改的行。我知道
NSFetchedResultsControllerDelegate
s在托管对象的更改时触发,而不是在谓词的更改时触发

那为什么我这么肯定我做错了什么?因为它以前工作过,当我使用
UISearchDisplayController
时,现在使用
UISearchController
时,它就不工作了。我没有回忆起的是,我正在从
shouldReloadTableForSearchString:
返回
YES
,当然,它调用
reloadData
。它以前工作过,但不是因为NSFetchedResultsControllerDelegate