asynchronous获取Swift Xcode
我使用集合视图来显示存储在CoreData中的图像,只有less数几个(大约15),但是当我向下滚动它时,它的接缝是因为我不是asynchronous获取我的数据,是只有15 UIImages可能吗?
所以这里是我的问题,我无法find任何地方的asynchronous获取下降教程,3天我期待。 对不起,如果我没有好好search。
这是从教程中得到的一些东西
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.") }
梦是一个types的数组[梦想],但是当我显示集合视图什么都没有出现这是我以前做过的
let fetchRequest = NSFetchRequest(entityName: "Dreams") if let fetchResults = contxt.executeFetchRequest(fetchRequest, error: nil) as? [Dream] { dreams = fetchResults }
它工作得很好,
非常感谢您的帮助
不幸的是,我没有时间在这个例子中提供特定的代码。 不过,我确实想提出一个基本的策略。 在主线程上抓取这个数据是不太可能成为你的问题的,但是一次取一切肯定是可以的,特别是涉及大量的二进制数据。 在下列情况下,这应该显着加快:
- 您开始使用具有良好批处理大小的
NSFetchedResultsController
而不是原始获取请求。 NSFetchedResultsController对集合视图的更新有点挑剔,超出了这个问题的具体范围,但是一旦正确设置,它们就工作得很好。 - 您将图像存储为文件而不是核心数据本身,并将path存储到文件中。 然后,每次在对象中发生故障时,图像数据都不会被加载到内存中,您可以使用该文件URL简单地加载和显示图像。
坚持在Core Data中存储二进制数据的人通常会发现,将数据作为唯一的属性存储在一个单独的“Image”实体中,并与正在显示的实体有关系。 图像对象(连同其二进制图像数据)可以保持为错误,因此即使当您为集合视图获取的对象在内存中时也不会存在内存中。 然而,我更喜欢不将它们存储在核心数据中,只是简单地处理由此产生的primefaces性陷阱,以及文件核心数据指向被删除的可能性。