0

我有下面的代碼插入一個新的實體到核心數據模型(通過神奇的記錄):在後期保存上下文 - 將指針保存到上下文?核心數據

- (void)insertWithData:(NSDictionary *)dataDictionary { 

DLog(@"Inserting %@", [_entityClass description]); 

NSManagedObjectContext *context = [NSManagedObjectContext contextForCurrentThread]; 

id entity = [_entityClass createInContext:context]; 

[entity setValuesFromDictionary:dataDictionary]; 

if ([entity isKindOfClass:[Syncable class]]) { 
    [entity setValue:YesNumber forKey:@"syncedToServer"]; 
} 

[context save]; 
} 

由於這個代碼運行多次在for循環從另一個類叫,我想只有在循環完成後才保存上下文以優化性能。

我的問題是做這件事的最好方法是什麼?我應該在這裏保存對上下文的引用(例如在應用程序委託中),然後在調用類中使用此引用進行保存?或者,我可以再打電話來的NSManagedObjectContext contextForCurrent線程中調用類,並使用這個參考 - 在調用的類即:

NSManagedObjectContext * context = [NSManagedObjectContext contextForCurrentThread]; 
[context save]; 

回答

-1

是的,你可以循環後保存上下文。這比在每次迭代中保存好得多。如果你看看MagicalRecord src,你會發現MR_contextForCurrentThread對於同一個線程總是返回相同的上下文,如果沒有線程的話,MagicalRecord會創建它。
此外,你不需要通過上下文[_entityClass createInContext:context],只是[_entityClass MR_createEntity] - 這將是對當前線程的上下文中創建

+0

對不起,這是錯誤的。首先,現在不推薦使用contextForCurrentThread。它已經在MagicalRecord 3.0中被刪除,所以現在是習慣不使用它的時候了。您可以指定上下文,但應該使用限制上下文,並將默認上下文作爲父級,或者讓它觀察新上下文中的更改,並在保存時合併它們。 – casademora

0

如果您想保存在循環結束時,我建議傳遞您的NSManagedObjectContext作爲參數:

- (void) insertData:(id)data inContext:(NSManagedObjectContext *)context; 
{ 
    //do all your data stuff here. 

} 

你會使用它像這樣:

NSManagedObjectContext *context = [NSManagedObjectContext MR_confinementContext]; 
for (id obj in objCollection) 
{ 
    [self insertData:obj inContext:context]; 
} 
[context MR_save]; 
相關問題