异步获取Swift Xcode

Chezelles的Gauthier

我使用集合视图显示存储在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
    }

效果很好

非常感谢您的帮助

安迪·里尔丹(Andy Riordan)

不幸的是,在这种情况下,我没有时间提供特定的代码。但是,我确实想提出一个基本策略。在这里,获取主线程绝对不是您的问题,但是绝对可以一次获取所有内容,尤其是涉及大量二进制数据时。如果发生以下情况,则应大大加快速度:

  1. 您开始使用NSFetchedResultsController具有良好批次大小的而不是原始提取请求。NSFetchedResultsController对集合视图的更新有些挑剔,其方式超出了此问题的特定范围,但是一旦正确设置,它们就可以很好地工作。
  2. 您将图像存储为文件,而不是存储在Core Data本身中,而是存储文件的路径。这样,每次出现对象故障时,图像数据就不会加载到内存中,并且您可以使用该文件URL在单元格出现在屏幕上时简单地加载并显示图像。

坚持将二进制数据存储在Core Data中的人们通常会发现,将数据作为唯一属性存储在与您所显示的实体有关系的单独“ Image”实体中是有帮助的。这样,即使您为收集视图获取的对象位于内存中,也可以将图像对象(及其二进制图像数据)保存为故障,从而不保存在内存中。但是,我不希望将它们存储在Core Data中,而只是处理由此产生的原子性陷阱,以及文件Core Data指向文件以某种方式被删除的可能性。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章