【发布时间】:2011-04-14 09:43:54
【问题描述】:
我遇到的问题如下:
我有一个 UITableView,我使用来自 NSFetchedResultsController 的数据提供数据,该 NSFetchedResultsController 从核心数据中检索大约 6000 行。 NSFetchRequest 的 fetchBatchSize 设置为 20,如果我不应用任何 NSSortDescriptor,则获取速度足够快,不会阻塞 UI 线程。
但是,我确实需要显示那些按字母顺序排序的行,我使用以下 NSSortDescriptor:
[[[NSSortDescriptor alloc] initWithKey:@"optionText" ascending:YES selector:@selector(localizedCaseInsensitiveCompare:)] autorelease];
当事情发生变化时,提取操作现在需要大约 3 秒才能完成,因为正在对 6000 行进行排序。显然,在这几秒钟内,用户界面被阻塞,用户体验很糟糕。
我知道我可以在后台线程中进行提取,然后将对象 ID 传递给主线程,但在这种情况下,我怎么还能在主线程中使用 NSFetchedResultsController(我也用它来观察数据的变化)?
我也有 indexed 我正在排序的属性,但这只会优化查找而不是排序性能。
任何想法将不胜感激,谢谢!
【问题讨论】:
-
愚蠢的问题,但我想您不能在将数据加载到 Core Data 之前对其进行预排序?
-
愚蠢的问题,在您运行获取请求时 managedObjectContext.hasChanges 的值是多少?
标签: sorting core-data background nsfetchedresultscontroller