MagicalRecord 및 CoreData에 대한 모든 것을 이해하기가 매우 어렵습니다. 따라서, 두 가지 코드가 동일한 작업을 수행합니다. 여기서 tallyM은 MR_defaultContext에서 실행되는 관리 객체입니다.MagicalRecord saveWithBlock 대 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에는 MR_defaultContext에서 실행되는 tallyM이 있습니다. 그런 다음 saveWithBlock 내부에서 tallyML을 변경하고 컨텍스트를 저장하여 tallyM을 변경합니다. 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가 어떻게 작동하는지 정확하게 이해하고 싶습니다.