이러한 종류의 작업을 수행하는 올바른 방법은 새로운 관리 개체 컨텍스트를 사용하는 것입니다. 동일한 영구 저장소를 사용하여 관리되는 개체 컨텍스트를 만듭니다.
NSManagedObjectContext *tempContext = [[[NSManagedObjectContext alloc] init] autorelease];
[tempContext setPersistentStore:[originalContext persistentStore]];
그런 다음 새 개체를 추가하고 변경합니다.
저장할 때가되면 tempContext에서 [tempContext save : ...]를 호출하고 저장 알림을 처리하여 원래 컨텍스트에 병합해야합니다. 객체를 버리려면이 임시 컨텍스트를 해제하고 잊어 버리십시오.
따라서 임시 컨텍스트를 저장하면 변경 사항이 스토어에 유지되며 해당 변경 사항을 기본 컨텍스트로 다시 가져 오면됩니다.
- (void)tempContextSaved:(NSNotification *)notification {
[originalContext mergeChangesFromContextDidSaveNotification:notification];
}
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(tempContextSaved:)
name:NSManagedObjectContextDidSaveNotification
object:tempContext];
[tempContext save:NULL];
[[NSNotificationCenter defaultCenter] removeObserver:self
name:NSManagedObjectContextDidSaveNotification
object:tempContext];
이것은 다중 스레드 코어 데이터 작업을 처리해야하는 방법이기도합니다. 스레드 당 하나의 컨텍스트.
관계를 추가하기 위해이 임시 컨텍스트에서 기존 객체에 액세스해야하는 경우 객체의 ID를 사용하여 다음과 같은 새 인스턴스를 가져와야합니다.
NSManagedObject *objectInOriginalContext = ...;
NSManagedObject *objectInTemporaryContext = [tempContext objectWithID:[objectInOriginalContext objectID]];
NSManagedObject
잘못된 컨텍스트에서 를 사용하려고하면 저장하는 동안 예외가 발생합니다.