以下代码来自 this post 已接受的答案,关于使用 Core Data 在表格 View 中实现搜索栏。它使用两个获取结果 Controller (FRC)。一种用于“普通” TableView ,一种用于搜索结果 TableView 。它使用辅助方法来决定 TableView 数据源方法、FRC 委托(delegate)方法等使用哪个 FRC。
除了以下部分之外,我理解大部分代码。我应该输入什么代码来替换注释“更新过滤器...”
?为什么我应该将 self.searchFetchedResultsController 及其委托(delegate)设置为 nil?
- (void)filterContentForSearchText:(NSString*)searchText scope:(NSInteger)scope
{
// update the filter, in this case just blow away the FRC and let lazy evaluation create another with the relevant search info
self.searchFetchedResultsController.delegate = nil;
self.searchFetchedResultsController = nil;
...
}
最佳答案
以下是将 fetchedResultsController
设置为 nil 时发生的情况。下次 TableView (或搜索结果 TableView )需要数据时,它将查询其数据源,而数据源又引用(不存在的)FRC。如果您查看 fetchedResultsController
方法,您会发现 FRC 是延迟创建的 - 仅当它为 时。在初始化例程中,执行获取请求并向数据源提供新的结果。 nil
虽然这工作得相当可靠,但对于不完全破坏 FRC 仍存在争议。它是多余的并且需要更多的时间、CPU 和电池电量。只需调用即可达到完全相同的效果
[fetchedResultsController performFetch:nil];
现在数据源也将具有最新的可用数据。
编辑
正如评论中所述,您应该真正修改 fetchedResultsController
方法以延迟创建。查看 Apple 模板以获取指导。
if (_fetchedResultsController != nil) {
return _fetchedResultsController;
}
// continue creating a new one
关于ios - 为什么搜索 FetchedResultsController 设置为 nil?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12551543/