2013-05-05 3 views
0

두 개의 NSManagedContext, 하나의 부모 및 동시성에 사용하는 하나의 자식이 있습니다. 나는이 메서드를 호출 내보기 컨트롤러 중 하나에서NSmanagedObject를 다른 NSManagedContext로 이동할 수 있습니까?

self.managedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType]; 

self.backgroundContext = [[NSManagedObjectContext alloc] initWithConcurrencyType: NSPrivateQueueConcurrencyType]; 
self.backgroundContext.parentContext = self.managedObjectContext; 

:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Illegal attempt to establish a relationship '[...]' between objects in different contexts 

그것은 self.user ISN 것 같다 ':이 메서드를 호출

[Stream followingStreamForUser:self.user fromDictionary:dict inManagedObjectContext: [AppController sharedAppController].backgroundContext]; 

다음과 같은 오류가 발생 다음과 같이 지정 내 backgroundContext에 t. 내 self.user 개체를 내 backgroundContext으로 옮길 수 있는지 궁금하거나 내 사용자 개체가 컨텍스트 X에 추가되는 위치와 시간을 볼 수 있는지 궁금합니다.

답변

1

잘못된 컨텍스트에서 NSManagedObject를 사용하려고하면 저장 중에 예외가 발생합니다. 변경 사항은 당신이 배경 컨텍스트를 저장하면 다음

NSManagedObject *user = ...; 
NSManagedObject *userInBackgroundContext = [backgroundContext objectWithID:[user objectID]]; 

: 임시 컨텍스트에서 기존 개체에 액세스해야하는 경우

는, 당신은이 같은 새로운 인스턴스를 얻을 수있는 객체의 ID를 사용해야합니다 저장소에 유지되고, 당신은 그 주된 맥락으로 그 변화를 되돌려 줄 필요가있다.

+0

감사합니다. – Anders

1

컨텍스트간에 공유 할 수있는 유일한 개체는 관리 개체 ID입니다. 당신은 다음과 같이 구할 수 있습니다

NSManagedObjectID *objectID = self.user.objectID; 

는 다음과 같이 다른 상황에서 해당 개체를 얻을 :

User *backgroundUser = [backgroundContext obectWithID:objectID]; 

backgroundUser이 배경 맥락에서 다른 개체를 사용하는 지금은 안전합니다.

+0

감사합니다. – Anders

관련 문제