Swift - 更快地从C​​ore Data加载信息

时间:2014-12-05 22:06:34

标签: core-data swift grand-central-dispatch dispatch-async

嘿,如何获取大量信息,如1000行没有卡住? 我试着用这个:

dispatch_async(dispatch_get_main_queue(), {
//here code
})

但是当我执行请求self.context.executeFetchRequest时,它会返回fatal error: unexpectedly found nil while unwrapping an Optional value。我有一个错误,我必须在函数前添加self.

    let queue:dispatch_queue_t = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
 dispatch_async(queue, { () -> Void in
                 //code
        })

但我也得到同样的错误......

我使用NSFetchRequest并在NSArray中添加结果,然后将结果循环到for循环中,并在循环中对结果进行排序。

1 个答案:

答案 0 :(得分:0)

核心数据的1000条记录不是很多。只需在线程上获取它们。

我不建议“对字典中的结果进行排序”。您应该考虑应用程序逻辑如何与数据交互,并简单地从Core Data持久性存储中获取所需的对象。

例如,如果要在表视图中显示1000行,请使用针对此类情况优化的“NSFetchedResultsController” - 这样您就可以避免内存和性能问题而无需任何工作。

如果你真的需要使用Core Data进行线程处理(我怀疑),我建议不要从GCD开始,而是使用Core Data自己的并发API,例如performBlock和全局队列子上下文。但很可能你不必担心这些。

最后,您的错误实际上是指您尚未发布的一些代码。它与Swift的选项有关。例如,如果您将变量声明为类型variable : String?(或者您使用返回此类型的API),如果您确定它不是variable!,则可以使用nil将其解包。如果是nil,您将收到上述崩溃。