Core data Swift-更快地从核心数据加载信息

Core data Swift-更快地从核心数据加载信息,core-data,swift,grand-central-dispatch,dispatch-async,Core Data,Swift,Grand Central Dispatch,Dispatch Async,嘿,如何在不卡住的情况下获取大量信息,比如1000行? 我试着这样做: dispatch_async(dispatch_get_main_queue(), { //here code }) 但是当我执行请求时,self.context.executeFetchRequest返回我致命错误:在展开可选值时意外发现nil。我有一个错误,我必须在函数前面添加self. let queue:dispatch_queue_t = dispatch_get_global_queue(DISPATC

嘿,如何在不卡住的情况下获取大量信息,比如1000行? 我试着这样做:

dispatch_async(dispatch_get_main_queue(), {
//here code
})
但是当我执行请求时,
self.context.executeFetchRequest
返回我
致命错误:在展开可选值时意外发现nil
。我有一个错误,我必须在函数前面添加
self.

    let queue:dispatch_queue_t = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
 dispatch_async(queue, { () -> Void in
                 //code
        })
但我也有同样的错误


我使用NSFetchRequest,将结果添加到NSArray中,并将结果循环到for循环中,在循环中,我将结果排序到字典中。

1000条记录不太适合核心数据。把它们挂在线上就行了

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

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

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


最后,您的错误实际上是指一些您尚未发布的代码。这与斯威夫特的期权有关。例如,如果将变量声明为类型
variable:String?
(或者使用返回此类类型的API),则可以使用
variable将其展开如果您确定它不是
nil
。如果是
nil
,则会出现上述崩溃

我以NSData和NSKEYEDUNARCHIVE的形式从核心数据中获取数据存档包含字典,此字典加载我的tableview,tableview位于PageViewController中,该控制器加载不同的字典,当我在页面之间滑动时,我有1.5-2秒卡住,我从核心数据中获取了数百个字典,我将它们添加到一个字典中,并将其发送到pageviewcontroller中以显示所有数据是的,听起来像NSFetchedResultsController是为您准备的。去掉存档的字典,将原始值存储在核心数据中。我不能存储原始值。我的所有代码都想存储dict[“(value)/(valueUnit)”]=55,我必须保存3件东西例如:dict[“apple/pieces”]=4,我想计算如果我有多个苹果/片,如果它的5倍5x4=20片,情况如何,我有橙色片段和奇异果片段,我想得到所有片段,听起来像是直接在核心数据中的原始值。(是的,你可以!)你需要智能地设计你的数据模型,以避免给CPU带来荒谬的额外和不必要的负担。如果我创建其他实体并将数据存储在那里,我的请求将比现在多3倍,我必须在变量中传递大量数据来连接所有内容,这意味着+2000行代码。也许如果我这样做,它会使应用程序比现在慢。。。