我很想理解关于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的行为方式。