获取 MagicalRecord NSManagedContext 以在后台线程中使用
Posted
技术标签:
【中文标题】获取 MagicalRecord NSManagedContext 以在后台线程中使用【英文标题】:Get MagicalRecord NSManagedContext for use in background threads 【发布时间】:2014-10-02 01:29:22 【问题描述】:我正在使用 MagicalRecord 2.2 并尝试在默认情况下在后台线程上运行我的 fetch 查询,但似乎文档已过时。具体来说:
If you need to create a new managed object context for use in non-main threads,
use the following method:
NSManagedObjectContext *myNewContext = [NSManagedObjectContext MR_newContext];
但是,缺少MR_newContext
方法(猜测它已被弃用)。有一个[NSManagedObjectContext MR_context]
方法,但我不确定它返回什么上下文。深入研究代码,它会创建一个并发类型为NSPrivateQueueConcurrencyType
的新上下文,所以我猜这就是我要寻找的。p>
谁能确认一下?
【问题讨论】:
【参考方案1】:你可能想要使用
[NSManagedObjectContext MR_confinementContext]
不过,由于 CoreData 团队已经有效地弃用了限制上下文,这个名称也可能会改变。
【讨论】:
【参考方案2】:我认为你最好使用+ (NSManagedObjectContext *) MR_contextForCurrentThread;
。它的实现对于您的目的来说似乎很好:
+ (NSManagedObjectContext *) MR_contextForCurrentThread;
if ([NSThread isMainThread])
return [self MR_defaultContext];
else
NSMutableDictionary *threadDict = [[NSThread currentThread] threadDictionary];
NSManagedObjectContext *threadContext = [threadDict objectForKey:kMagicalRecordManagedObjectContextKey];
if (threadContext == nil)
threadContext = [self MR_contextWithParent:[NSManagedObjectContext MR_defaultContext]];
[threadDict setObject:threadContext forKey:kMagicalRecordManagedObjectContextKey];
return threadContext;
【讨论】:
不要使用这种方法。它会随机地撞到你身上。 不推荐,详见此处:saulmora.com/2013/09/15/…以上是关于获取 MagicalRecord NSManagedContext 以在后台线程中使用的主要内容,如果未能解决你的问题,请参考以下文章
获取 MagicalRecord NSManagedContext 以在后台线程中使用