2014-12-05 79 views
0

嘿如何获得大量的信息,如1000行没有卡住? 我尝试用这样的:Swift - 从核心数据加载信息更快

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循环,并在循环排序我在字典的结果。

回答

0

1000条记录对于Core Data来说并不是很多。只需在线上获取它们。

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

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

如果你确实需要使用核心数据线程(我怀疑),我会建议不要从GCD开始,而是使用核心数据自己的并发API,如performBlock和全局队列子上下文。但很可能你不必担心这些。

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

+0

我从核心数据获取数据作为NSData和unarchive与NSKeyedUnarchived存档包含Dictionary 和此字典加载我的tableview,tableview是在PageViewController加载不同的字典,当我在页面之间滑动我有1.5- 2秒钟卡住了,我收到了来自Core Data的数百个字典,并将它们添加到1个字典中,并将其发送到pageviewcontroller以显示所有数据。 – 2014-12-06 02:41:20

+0

是的,听起来像是NSFetchedResultsController。取出已存档的字典并将原始值存储在Core Data中。 – Mundi 2014-12-06 02:46:59

+0

我不能存储我所有代码想要存储的原始值dict [“(value)/ \(valueUnit)”] = 55,我必须保存3件事例如: dict [“apple/pieces”] = 4和我想要数数如果我有多次苹果/件如果它的5次5x4 = 20件,我有橙色件和奇异果件,我想要得到所有件件 – 2014-12-06 02:51:50