我使用集合视图显示存储在CoreData中的图像,只有几个(大约15个),但是当我向下滚动时,它滞后了,这可能是因为我没有异步获取数据,只有15个UIImages可能吗?
所以这是我的问题,我找不到想要的关于异步获取的后裔教程,该教程可在3天的任何地方迅速找到。对不起,如果我搜索不好。
这就是教程中的一些内容
let entity = NSEntityDescription.entityForName("Dreams", inManagedObjectContext: contxt)
let fetchRequest = NSFetchRequest()
fetchRequest.entity = entity
let asyncFetch = NSAsynchronousFetchRequest(fetchRequest: fetchRequest) {
(result:NSAsynchronousFetchResult!) -> Void in
if result.finalResult!.count > 0 {
self.dreams = result.finalResult! as [Dream]
}
NSLog("Done.")
}
Dreams是[Dream]类型的数组,但是当我显示集合视图时,什么也没出现
let fetchRequest = NSFetchRequest(entityName: "Dreams")
if let fetchResults = contxt.executeFetchRequest(fetchRequest, error: nil) as? [Dream] {
dreams = fetchResults
}
效果很好
非常感谢您的帮助
不幸的是,在这种情况下,我没有时间提供特定的代码。但是,我确实想提出一个基本策略。在这里,获取主线程绝对不是您的问题,但是绝对可以一次获取所有内容,尤其是涉及大量二进制数据时。如果发生以下情况,则应大大加快速度:
NSFetchedResultsController
具有良好批次大小的而不是原始提取请求。NSFetchedResultsController对集合视图的更新有些挑剔,其方式超出了此问题的特定范围,但是一旦正确设置,它们就可以很好地工作。坚持将二进制数据存储在Core Data中的人们通常会发现,将数据作为唯一属性存储在与您所显示的实体有关系的单独“ Image”实体中是有帮助的。这样,即使您为收集视图获取的对象位于内存中,也可以将图像对象(及其二进制图像数据)保存为故障,从而不保存在内存中。但是,我不希望将它们存储在Core Data中,而只是处理由此产生的原子性陷阱,以及文件Core Data指向文件以某种方式被删除的可能性。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句