>在NSOperations中创建实体时,我可以简单地使用默认上下文创建,或者因为我在一个不在主线程上的新线程,这是不允许/建议的?如果我在这个线程上创建一个新实体,那么将它合并回默认上下文然后(而不是保存到商店)的最佳方法是什么?
>在获取这些线程时,我需要获取然后更新该实体中的数据.我不知道如何做到这一点然后合并到默认上下文.
或者,当您保存时,您获取/创建的线程无关紧要?
我说上面的默认上下文,因为我有NSFetchedResultsControllers监视更新和插入的默认上下文.目前我的解决方案是在主线程上完成所有这些工作,但是应用程序现在开始爬行,现在正在通过它运行大量数据.
我还有一个类监控(通过KVO) *** 作队列计数.一旦它变为零,我就预先形成一个保存.我宁愿只在完成所有上述NSOperations后执行,就像我现在正在执行的那样.感谢您的帮助.
解决方法 我们暂时忽略MagicalRecord.要在多个线程上使用Core Data,您需要了解一些事情.>永远不要在线程之间传递NSManagedobject.相反,传递所需对象的NSManagedobjectID,并在后台线程中重新获取它.
>负责任地构建NSManagedobjectContext.这意味着您必须了解initWithConcurrencyType:的含义.我们将进入那个.
主线程
您的主NSManagedobjectContext应使用并发类型NSMainQueueConcurrencyType构建.这将允许您利用内置队列中的上下文来执行串行 *** 作.每当后台线程与主上下文交互时,您应该使用performBlock或performBlockAnDWait来完成工作.
- (NSManagedobjectContext *)managedobjectContext { if (_managedobjectContext != nil) { return _managedobjectContext; } NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator]; if (coordinator != nil) { _managedobjectContext = [[NSManagedobjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType]; [_managedobjectContext setPersistentStoreCoordinator:coordinator]; } return _managedobjectContext;}
背景线程
无论何时在后台线程中工作,都需要启动新的上下文.您不应该在线程之间共享上下文.将对主线程上下文的引用传递到 *** 作中,并在 *** 作开始后构建后台上下文.这将确保它构建在您将执行工作的线程上.
- (NSManagedobjectContext *)newBackgroundManagedobjectContext{ // Create new context with private concurrency type NSManagedobjectContext *newContext = [[NSManagedobjectContext alloc] initWithConcurrencyType:nsprivateQueueConcurrencyType]; [newContext setParentContext:self.mainContext]; // Optimization [newContext setUndoManager:nil]; return newContext;}
将此背景上下文视为便笺簿.无论你做什么,都会留在那里,直到你拯救.由于您设置了parentContext,因此对背景上下文的保存会将更改合并到主上下文中.这将更新NSFetchedResultsController,但由于您没有调用save,因此数据尚未保留.在队列KVO中,您可以通过排队保存块来调用主上下文中的保存.
[self performBlock:^{ NSError *error; [self save:&error]; if (error) { // handle errors }}];总结
以上是内存溢出为你收集整理的ios – Magical Record在单独的线程中创建/获取实体全部内容,希望文章能够帮你解决ios – Magical Record在单独的线程中创建/获取实体所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)