在后台和主线程中使用托管对象上下文

Posted

技术标签:

【中文标题】在后台和主线程中使用托管对象上下文【英文标题】:Use of managed object context in background and main thread 【发布时间】:2013-01-29 10:45:17 【问题描述】:

我有一个在点击按钮时被调用的函数。此外还有从这个方法调用的方法[self getData],它使用核心数据更新db中的值。

另外,我有一个后台线程正在运行,每分钟执行一次。我在后台线程中使用了单独的托管对象上下文和托管对象通知。但我不确定是在[self getData] 中使用新的托管对象实例还是[self managedObjectContext],因为此方法是在主线程上调用的,我是否必须为此使用托管对象通知?

在这些情况下,当有方法在后台和主线程上运行时,最佳做法是什么。

【问题讨论】:

【参考方案1】:

您可以使用私有队列并发类型创建一个临时上下文,它是主托管对象上下文的子级:

NSManagedObjectContext *temporaryContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
temporaryContext.parentContext = [self managedObjectContext];
[temporaryContext performBlock:^
   // ...
]

当我研究如何执行此操作时,我发现本教程非常有用: http://www.cocoanetics.com/2012/07/multi-context-coredata/

【讨论】:

感谢您的回复,我正在检查它

以上是关于在后台和主线程中使用托管对象上下文的主要内容,如果未能解决你的问题,请参考以下文章

在后台线程中更新托管对象上下文

在后台线程上安全保存 Core Data 托管对象上下文的正确方法?

在后台队列中保存临时托管对象上下文

托管对象上下文未保存到持久存储

Core Data 托管对象上下文线程同步

在多线程上下文中,在托管对象上设置属性时,CoreData 阻塞