2012-02-03 3 views
2

부모 - 자식 관계를 통해 ElementB에 있어야하는 여러 특성을 가진 NSManagedObject ElementA가 있습니다. ElementA를 ElementB로 상위 엔터티로 설정하면 NSPersistentStoreCoordinator가 실패합니다. ManagedObjectModel이 올바르게 빌드되고 엔티티/클래스가 서로 별도로 작동합니다. 앱이 실패하고 컴파일하는 유일한 차이점은이 부모 - 자식 관계입니다. 두 엔티티의 속성 중 어느 것도 겹치지 않습니다.NSManagedObject 엔터티 상속은 NSInternalInconsistencyException을 발생시킵니다.

충분한 담당자가 아직 없으므로 이미지는 ElementA Model, ElementB Model 링크에 있습니다. 와 사용자 정의 클래스를 구현하지 않고

  1. :

    는 지금까지 문제 해결이가는대로, 나는 다음의 모든 시도했습니다. 추상적으로 ElementA 설정

  2. 재설정 엑스 코드 (청소) (두 개체의 모든 속성을 비우는 포함) 한 번에 속성 하나를 추가 한 후 제거 및 (그러나 나는 그것이 추상적하지 않을 필요) 시뮬레이터 (모두 재설정) 및 내 컴퓨터 다시 시작.

Apple의 문서 도구 (Core Data Programming Guide : 관리 객체 모델)를 읽었으며 모든 것이 Entity Inheritance 가이드 라인과 일치하는 것 같습니다.

__persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]]; 

은 내가 보이지 않는 여기에 누락 된 것 :

이 실패 라인은? 이것은 이것이 힘들 것 같지 않아서 명백해야합니다. 모든 도움을 주시면 감사하겠습니다! 대한

편집 로저의 코멘트 응용 프로그램은 즉시 핵심 데이터 모델을 시작할 때 처음으로 액세스 될 때 실패

@. 위의 새 이미지는 모델 편집기를 사용하여 ElementB의 상위 엔터티를 설정하려고한다는 것을 보여줍니다.

uncaught exception 'NSInternalInconsistencyException', reason: 'Bad model. For entity 'ElementA' subentity 'ElementB (0x785d790)' is not registered in NSManagedModelModel. Model has a reference to ElementB (0x785e320)' 
+0

자세한 내용을 입력해야합니다. 관리 객체 모델보기의 스크린 샷을 게시하십시오. 또한 시작할 때, 관리 객체 중 하나를 인스턴스화 할 때 충돌이 발생합니다. ElementA를 ElementB의 부모/수퍼 클래스로 어떻게 설정하고 있습니까? 당신이 얻고있는 오류는 무엇입니까? – Rog

답변

1

아니요 전체 코드가 아니지만 ... 이것은 임시 기관을 제거 할 때 @ Scott BonAmi가 말한 것을 달성 한 방법입니다. 여전히 modelByMergingModels :를 사용하고 있기 때문에 하위 엔티티 자체를 파악합니다.

NSMutableArray *finalModels = [NSMutableArray arrayWithCapacity:0]; 
NSMutableArray *updatedEntities = [NSMutableArray arrayWithCapacity:0]; 

for (NSManagedObjectModel *immutableModel in allModels) { 
    NSManagedObjectModel *model = [immutableModel mutableCopy]; 

    for (NSEntityDescription *entity in [model entities]) { 
     if ([[[entity userInfo] objectForKey:@"TempPlaceholder"] boolValue]) { 
      // Ignore placeholder. 
      DULog(@"Ignoring: %@", entity.name); 
     } else { 
      [updatedEntities addObject:entity]; 
     } 
    } 

    [model setEntities:updatedEntities]; 
    [updatedEntities removeAllObjects]; 
    [finalModels addObject:model]; 
} 

NSManagedObjectModel *model = [NSManagedObjectModel modelByMergingModels:finalModels]; 
1

내가 동적으로 MOM을 만드는 another SO answer에서 사용되는 코드 논리 오류 었죠 : 다음은 내가 받고있어 오류 메시지입니다.

루프 시퀀스 동안 엔티티를 추가 할 때 ElementB (0x785d790)가 ElementA의 하위 항목으로 추가되고 나중에 'ElementB (0x785e320)'루프가 추가되어 다른 메모리 위치가 생성되고 NSInternalInconsistencyException입니다.

+0

이에 대한 해결 방법에 대한 자세한 정보가 있습니까? 저는 지금 당장 같은 문제에 직면 해 있으며 해결책을 구현하려고합니다. – bandejapaisa

+0

@bandejapaisa : 코드가있는 기계로 돌아 가면이 대답을 편집 할 것입니다. – sbonami

+0

감사합니다 - 나는 그것을 작동 시켰습니다. 아래에 내 솔루션을 게시합니다. – bandejapaisa

관련 문제