我很想理解關於MagicalRecord和CoreData的一切。假設我有兩塊代碼做同樣的事情,其中tallyM是一個在MR_defaultContext中運行的託管對象。MagicalRecord saveWithBlock vs saveToPersistentStoreAndWait
選項1:
Tally *tallyM = (Tally *)[Tally MR_findFirstWithPredicate:predicateM];
[MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext) {
Tally *tallyMLocal = [tallyM MR_inContext:localContext];
tallyMLocal.tl_countMale = [NSString stringWithFormat:@"%ld", (long)uiTallyMaleCounter];
} completion:^(BOOL success, NSError *error) {
[self updateTallies_APICall:[tallyM MR_inContext:[NSManagedObjectContext MR_defaultContext]]];
}];
選項2:
Tally *tallyM = (Tally *)[Tally MR_findFirstWithPredicate:predicateM];
tallyM.tl_countMale = [NSString stringWithFormat:@"%ld", (long)uiTallyMaleCounter];
[tallyM.managedObjectContext MR_saveToPersistentStoreAndWait];
[self updateTallies_APICall:[tallyM MR_inContext:[NSManagedObjectContext MR_defaultContext]]];
問題:
哪一個更好?我明白,當你需要異步保存時,可以使用saveWithBlock,但是還有其他區別嗎?是選項1比更安全或更好選項2?
在選項1,我有tallyM運行在MR_defaultContext。然後在saveWithBlock裏面,我改變tallyM,改變tallyMLocal,並保存上下文。我可以100%確定在saveWithBlock運行後,在完成處理程序中(當我需要繼續使用tallyM時),tallyM(它仍在MR_defaultContext中運行)將會更新tl_countMale?
在選項1,在完成處理程序中,我仍然需要調用下面的代碼嗎?我假設(已經使用控制檯進行了檢查,但只是想確定),在執行saveWithBlock後,tallyM仍然在MR_defaultContext中運行。那麼是否需要再次調用MR_inContext?
[tallyM MR_inContext:[的NSManagedObjectContext MR_defaultContext]
比方說,我不需要異步保存在所有。所以我可以使用選項2或saveWithBlockAndWait。是saveWithBlockAndWait以任何方式比選項2?
我只是想確保我終於正確理解了MagicalRecords和CoreData的行爲方式。