2014-08-07 2 views
0

반환 값에 따라 다른 두 가지 버전을 사용하는 배경에 대한 내 이해는 다음과 같습니다. Managed-MOC에 의해 메모리에 생성 된 객체는 임시 객체 ID가 먼저 할당되어 영구 저장소와 관련없이 고유하게 식별 될 수 있습니다 . 그러나 MOC가 저장되면 영구 저장소 조정자는 이러한 Managed-Object에 대한 영구 객체 ID가 필요합니다. 내가 MOC의언제 getsPermanentIDsForObjects : 오류 : 혹시 필요합니까? 2 개의 다른 종류에서?

- (BOOL)obtainPermanentIDsForObjects:(NSArray *)objects error:(NSError **)error 

사용한 적이

(! 내가 잘못 가지고있는 경우, 제발 수정),하지만 여전히 MOC의 저장 호출 방법 문제없이. 그러나 이번 주에 제 3 자에 의해 사용 된 코드는 새로운 Managed-object를 삽입 한 직후마다이 MOC의 obtainPermanentIDsForObjects를 사용합니다. 이것이 정말로 필요합니까 ?? multithreading 환경에 필요할지도 모릅니다. 그러나 왜 애플 "CoreData PG"는이 방법을 언급하지 않았는가? 영속 스토어 코디네이터가 MOC를 저장하기 바로 전에 자동으로 수행 했습니까? withContext : 오류 나는 NSIncrementalStore 클래스에서이 방법의 또 다른 버전을보고 연구하는 동안

...

- (NSArray *)obtainPermanentIDsForObjects:(NSArray *)array error:(NSError **)error 

, 그것은이 방법은 executeRequest 전에 (다음 같아요,라는 서브 클래스에서 재정의)라고합니다 "라고 : 저장 요청과 함께 새로 삽입 된 개체에 영구 ID를 할당합니다. "

어떻게해야합니까? 두 버전 (저장 전에 NSIncrementalStore 하위 클래스, 새 생성 직후 MOC 버전)을 사용해야합니까? 어느 메소드가 호출되어야합니까?

감사합니다.

답변

2

NSManagedObjectNSManagedObjectContext에 처음 삽입하면 임시 NSManagedObjectID이됩니다. 컨텍스트가 저장되면 NSManagedObjectContextobtainPermanentIDsForObjects:error에 해당하는 NSManagedObjectContext을 호출하며, 다시 NSPersistentStoreCoordinator을 호출합니다.이 개체는 해당 개체를 담당하는 저장소를 찾고 저장소 자체에 obtainPermanentIDsForObjects:error을 호출합니다. 그러면 NSManagedObject의 임시 ID가 영구 ID로 바뀝니다.

NSManagedObjectIDs는 NSManagedObjectID이 영구 ID 인 경우에만 NSManagedObjectContext (동일한 상점을 공유하는 경우) 사이에서 전달할 수 있습니다. obtainPermanentIDsForObjects:error을 호출하면 임시 ID가 저장 조작과 관계없이 영구 ID로 바뀌지 만 오브젝트가 속한 상점이이를 예상하지 못할 수 있습니다.

+0

감사합니다. @quellish! 따라서 MOC간에 NSManagedObjectID 전달하기 위해 모든 MOC 저장 작업에 의존하지 않고이 메서드를 호출하는 것이 좋습니다 –

+1

이 메서드를 직접 호출하는 대신 저장하는 것이 좋습니다. 새로운 하위 컨텍스트를 작성하고, 상위를 설정하고, 오브젝트를 삽입하고 하위에 저장하십시오. 개체가 부모에게 푸시되고 더 이상 표시되지 않습니다. 원한다면 아이를 버리십시오. – quellish

+0

이 메서드를 호출하는 것이 적합한 경우가 있습니까? –