2012-03-15 3 views
2

시나리오 :에 걸쳐 컨텍스트

내가 자신의 컨텍스트 (동일한 스레드) 2 개 viewControllers 각각 처리하고 있습니다. managedObject의 objectID를 MOC2 -> MOC1에서 delegate 메소드를 통해 전달하려고합니다. 좋아, 그거야, 인 것처럼 보입니다.

여기에 문제가 있습니다 ... MOC1 (대리자)에서 [self.localMOC objectWithID:thePassedID]을 통해 새 개체에 대한 포인터를 얻습니다. 발견 된 개체에서 NSLog를 실행하면 로그에 설명 된 것처럼 보입니다. 이제 업데이트 된 가져온 결과 컨트롤러에서 찾을 때 해당 결과 컨트롤러를 사용하는 테이블보기에서 개체를 보여도 찾을 수 없습니다. 여기

로그 문은 ...
objectWithID를 통해 개체를 : <Account: 0x6b11f90> (entity: Account; id: 0x6db44b0 <x-coredata:///Account/t5F84827D-E710-4331-A462-FCA1A0D335102> ; data: <fault>)

결과 컨트롤러 개체 :뿐만 아니라, 하나는 permanentID이고, 다른 하나는 temporaryID 같이 <Account: 0x6b1fc50> (entity: Account; id: 0x6b50250 <x-coredata://84B6642A-9C80-451F-BED4-52952EDFC43C/Account/p9> ; data: <fault>)

보인다 완전히 다른 메모리 주소.

제가 잘못하고있는 것에 대한 단서가 있습니까? 다음은

는 흐름이다 :

enter image description here

답변

0

iOS5 부모/자식 MOC를 활용했습니다. 객체 ID가 영구적 인 ID 임에도 불구하고 컨텍스트간에 다른 객체를 반환 한 이유를 완전히 이해하지 못했습니다. 전체 저장 후 데이터를 다시 가져 왔지만 병합하는 것과 분명히 관련이있었습니다. 시간이 지날수록 코어 데이터의 내부 동작이 점차적으로 나에게 의미가 있습니다. 생각해 줘서 고마워.

1

는 변경 내용을 병합 할 수 있도록 각 관리 개체 컨텍스트가 다른 컨텍스트에서 "저장 않았다"통지 (NSManagedObjextContextDidSaveNotification)의 관찰자로 등록해야 mergeChangesFromContextDidSaveNotification: 을 사용하여 다른 컨텍스트에서 저장합니다. 나는 OBJECTID의 두 가지 형태가 당신이 그 시점이었다 특정된다. 즉 /p9 끝나지 않는 첫 번째는 (그것을 삽입하지만 아직 저장되지 않은 뜻을 나타냅니다 것을 생각

+0

글쎄, 새로운 관리 객체 (또는 그 형태)가 테이블 뷰와 페치 결과 컨트롤러에 나타나지 않기 때문에 MOC 1이 업데이트된다는 것을 알고 있습니다. 또한 ObjectID를 전달하기 위해 대리자 메서드를 사용해야합니다. – Gobot

+0

아마도 업데이트되고 _updating_입니까? 두 개의 별도 컨텍스트가 있고 변경하는 경우 어떻게 든 데이터를 동기화해야합니다. 현재 어떻게하고 있습니까? – jrturton

+0

NSManagedObject의 Reset 메서드를 통해. 나는 ObjectID가 각각의 관리 대상 객체에 특정한 것이라고 생각했고, 주로 그 객체에 대한 참조를 얻는데 사용되었다. "ID"값이 없으면 어떻게 그 객체를 검색 할 수 있습니까? 저를 혼란스럽게하는 것은 객체가 문맥에서 발견된다고 주장하는 것입니다. – Gobot

1

? 당신은 일반적으로 수 그 .sqlite 파일 내부를 확인하여 코어 데이터가 백업되었는지 확인하십시오. (자세한 내용은 구현 세부 사항입니다). sqlite3을 사용하려면 select * from Z<nameOfCoreDataEntityHere> where z_pk = 9;

0

새 오브젝트에서 objectID를 가져 오기 전에 은 obtainPermanentIDsForObjects 메소드의 NSManagedObjectContext를 사용합니다. 저장까지 기다리지 않고 파마 id를 얻을 수 있습니다.

관련 문제