Я очень стараюсь понять все о MagicalRecord и CoreData. Итак, скажем, у меня есть 2 фрагмента кода, делающие одно и то же, где tallyM — это управляемый объект, работающий в MR_defaultContext.
Вариант 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 в обработчике завершения мне все еще нужно вызывать приведенный ниже код? Я предполагаю (уже проверил с помощью консоли, но просто хочу убедиться), что tallyM все еще работает в MR_defaultContext после выполнения saveWithBlock. Так нужно ли снова вызывать MR_inContext?
[tallyM MR_inContext:[NSManagedObjectContext MR_defaultContext]]
Допустим, мне вообще не нужно асинхронное сохранение. Поэтому я могу использовать вариант 2 или saveWithBlockAndWait. Чем saveWithBlockAndWait лучше, чем Вариант 2?
Я просто хочу убедиться, что наконец правильно понял, как ведут себя MagicalRecords и CoreData.