获取MagicalRecord NSManagedContext以在后台线程中使用

时间:2014-10-02 01:29:23

标签: ios objective-c iphone magicalrecord magicalrecord-2.2

我正在使用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的新上下文,所以我猜这就是我正在寻找的。

有人可以确认吗?

2 个答案:

答案 0 :(得分:0)

您可能想要使用

[NSManagedObjectContext MR_confinementContext]

尽管由于CoreData团队已经有效地弃用了限制语境,但这个名称也可能会发生变化。

答案 1 :(得分:-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;
    }
}