2014-10-02 24 views
1

我使用MagicalRecord 2.2並試圖在後臺線程上默認運行我的讀取查詢,但似乎文檔已過時。具體來說,它說:獲取MagicalRecord NSManagedContext在後臺線程中使用

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

我想你最好用+ (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; 
    } 
} 
+0

請勿使用此方法。它隨時會在你身上崩潰。 – casademora 2014-10-02 08:32:09

+1

不建議在這裏詳細:http://saulmora.com/2013/09/15/why-contextforcurrentthread-doesn-t-work-in-magicalrecord/ – Ger 2014-10-02 17:34:18

+1

@Ger,哇,謝謝,不知道。 – orkenstein 2014-10-02 17:43:08

0

你可能想使用

[NSManagedObjectContext MR_confinementContext] 

雖然,作爲CoreData團隊已經有效地棄用約束背景下,這個名字很可能也會改變。

相關問題