【发布时间】:2012-08-03 18:40:06
【问题描述】:
在我的应用程序中,我有一个“主”NSPrivateQueueConcurrencyType 上下文,它充当视图控制器依赖和传递的 NSMainQueueConcurrencyType 上下文的父级。我想这样做是为了利用异步保存(这个应用程序使用 iCloud 和 Core Data 并且保存做了很多工作来导出无处不在的日志)。设置类似于this article底部提到的Zarra方法
应用内的保存通常如下所示:
[context save:nil];
[context.parentContext performBlock:^{
[context.parentContext save:nil];
}];
这似乎适用于小型编辑/更新,但我对删除许多对象时看到的内容感到困惑(例如,删除具有数百个与之相关的任务对象的项目)。
在这种情况下,保存是异步的,但看起来主线程进入了信号量等待情况(如我暂停调试器时所见)并且在后台私有之前被有效阻止(我无法在 UI 中滚动) context 完成保存。
实际上,我只是注意到滑动删除单个对象会导致明显的延迟,尽管有这种异步保存模式,所以看起来应用程序中的所有删除都很慢。
如果,或者,我分配一个新的NSPrivateQueueConcurrencyType 上下文,将其持久存储协调器设置为 AppDelegate 中的主 PSC,并执行删除和保存,它仍然做了很多工作,但 UI 永远不会被阻塞(但是我不得不担心协调上下文,在主上下文中重新获取)。
任何想法我可能做错了什么,或者你也看到过这种行为?
【问题讨论】:
标签: ios core-data nsmanagedobjectcontext