2012-08-08 2 views
6

childContext 및 parentContext는 "NSMainQueueConcurrencyType"의 모두중첩 NSManagedObjectContext 저장하고 objectID에

[childContext performBlock:^(void) { 
    [childContext save:NULL]; 

    [parentContext performBlock:^(void) { 
    [parentContext save:NULL]; 
    // Why is objectID for the inserted NSManagedObject still a temporary one here? 
    }]; 
}]; 

질문 :

  1. 이이 아이 및 부모 컨텍스트를 모두
  2. 가 왜 저장하는 올바른 방법인가 저장 후, 삽입 된 NSManagedObject의 objectID는 여전히 일시적인 것입니까?

답변

3
난 당신이 다른 메인 큐 MOC의 자식으로 메인 큐 MOC를 할 것 몇 가지 드문 경우로 생각하지만, 그것을 보는 것이 있는지 물어 저를 구걸 할 수

: 모두 갖는 장점은 무엇입니까 그들 중 NSMainQueueConcurrencyType이 될까요?

또한 알려진 버그입니다 (적어도 여러 번보고되었습니다). 하위 컨텍스트에서 삽입하고 저장하면 영구 저장소에 직접 연결된 ID 만 ID를 변경합니다. 따라서 새로 삽입 된 항목을 저장할 때 여러 가지 선택 사항이 있습니다.

  1. 저장하기 전에 영구 ID를 확보하십시오.
  2. [moc refreshObject:object mergeChanges:NO]으로 전화하고 모든 참조를 nil로 설정하십시오. 대부분의 부모 후에
  3. 획득 영구적 인 ID는이 데이터베이스에 수영을 필요로하기 때문에

내가 # 3를 선호 저장합니다. 당신이 그것을 후에하면, 부모에게서 얻을 수 있습니다.

+1

답변에있는 질문에 대답하십시오 : 어린이 MOC를 일련의 변경 사항에 대한 "준비 영역"으로 만들어서 원자 적으로 저장하거나 거부 할 수있게하십시오. (즉, 사용자가 취소 버튼을 누르면 MOC를 저장하지 않고 그냥 버립니다.) – benzado

관련 문제