Iphone iOS筛选器NSFetchedResultsController高效
我正在尝试将搜索支持添加到备份的Iphone iOS筛选器NSFetchedResultsController高效,iphone,cocoa-touch,xcode,core-data,ipod-touch,Iphone,Cocoa Touch,Xcode,Core Data,Ipod Touch,我正在尝试将搜索支持添加到备份的UITableView核心数据中,并开始遇到一些性能问题。我目前与两个NSFetchedResultsController(一个用于常规,一个用于搜索)有关联。在我的uisearchdisplayedelegate方法中,我在每次调用后释放并重新创建我的NSFetchedResultsController。但是,这会导致键入时出现延迟!是否有更有效的方法过滤NSFetchedResultsController?我已经将批处理大小设置为大约50个项目,如果这有区别的
UITableView
核心数据中,并开始遇到一些性能问题。我目前与两个NSFetchedResultsController
(一个用于常规,一个用于搜索)有关联。在我的uisearchdisplayedelegate
方法中,我在每次调用后释放并重新创建我的NSFetchedResultsController
。但是,这会导致键入时出现延迟!是否有更有效的方法过滤NSFetchedResultsController
?我已经将批处理大小设置为大约50个项目,如果这有区别的话,我的数据库有几千条记录。谢谢 这一点非常清楚:
- 如果存在缓存,请将其删除
- 更新
属性。请注意,您不能简单地修改现有的获取请求;您必须创建一个新的fetchRequest
- 调用
-executeFetch:
NSPredicate *pre = [NSPredicate predicateWithFormat:@"attribute CONTAINS [cd] %@", searchString];
NSArray *searchResults = [[self.fetchedResultsController fetchedObjects] filteredArrayUsingPredicate:pre]
希望有帮助 是的,您可以:
创建NSFetchRequest实例并每次更改其排序描述符:
let shortDescriptor = NSSortDescriptor(key: key, ascending: ascending)
request.sortDescriptors = [shortDescriptor]
do {
try fetchedResultViewController?.performFetch()
} catch let error as NSError {
print("Error in fetch \(error)")
}
阅读苹果文档:如果每次都发出执行fetch的新调用,那么这比重新创建
NSFetchedResultsController
更有效吗?至少,您不会每次都有创建和销毁NSFetchedResultsController
的开销。所以,虽然我没有任何指标来衡量它的效率有多高,但它应该是。谢谢。我会尝试一下,但看起来我可能需要添加一些异步代码(并延迟提取)才能真正解决这个问题!当必须逐行更新UITableView
时,不能使用此方法。