0

내 핵심 데이터 모델에는 네 개의 속성을 의미하는 두 개의 자체 참조 관계가있는 엔티티 Shape가 들어 있습니다. 한 쌍은 일대 다 관계 (Shape.containedBy < - >> Shape.contains)이고 다른 한 쌍은 다 대다 관계입니다 (Shape.nextShapes < < - >> Shape.previousShapes). 모든 것이 애플리케이션에서 완벽하게 작동하므로 자체 참조 관계가 일반적으로 문제라고 생각하지 않습니다. 이 새 버전으로 모델을 마이그레이션에 올 때핵심 데이터 : 자체 참조 속성이있는 엔티티 마이그레이션

그러나, 다음 엑스 코드이 오류 메시지와 함께, 자동으로 생성 된 맵핑 모델을 컴파일에 실패 :

2009-10-30 17:10:09.387 mapc[18619:607] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Unable to parse the format string "FUNCTION($manager ,'destinationInstancesForSourceRelationshipNamed:sourceInstances:' , 'contains' , $source.contains) == 1"' 
*** Call stack at first throw: 
(
    0 CoreFoundation      0x00007fff80d735a4 __exceptionPreprocess + 180 
    1 libobjc.A.dylib      0x00007fff83f0a313 objc_exception_throw + 45 
    2 Foundation       0x00007fff819bc8d4 _qfqp2_performParsing + 8412 
    3 Foundation       0x00007fff819ba79d +[NSPredicate predicateWithFormat:arguments:] + 59 
    4 Foundation       0x00007fff81a482ef +[NSExpression expressionWithFormat:arguments:] + 68 
    5 Foundation       0x00007fff81a48843 +[NSExpression expressionWithFormat:] + 155 
    6 XDBase        0x0000000100038e94 -[XDDevRelationshipMapping valueExpressionAsString] + 260 
    7 XDBase        0x000000010003ae5c -[XDMappingCompilerSupport generateCompileResultForMappingModel:] + 2828 
    8 XDBase        0x000000010003b135 -[XDMappingCompilerSupport compileSourcePath:options:] + 309 
    9 mapc        0x0000000100001a1c 0x0 + 4294973980 
    10 mapc        0x0000000100001794 0x0 + 4294973332 
) 
terminate called after throwing an instance of 'NSException' 
Command /Developer/usr/bin/mapc failed with exit code 6 

은 '포함하는'하나의 이름입니다 자기 참조 특성의. 어쨌든, 정말 큰 문제는 매핑 모델을 볼 때 엔터티 매핑을 선택하자마자 Xcode가 충돌 할 때이 매핑 속성을 볼 수 없다는 것입니다. 그래서 나는 여기서 약간 벗어났다. 필자는 자체 참조 속성을 제거 할 수 없으므로 컴파일 할 매핑 모델을 수동으로 만들었습니다. 어떤 아이디어?

건배

+0

"모델을 새 버전으로 마이그레이션"한다고 할 때 새로운 버전의 응용 프로그램 인 Xcode, OS가 필요합니까? – TechZen

+0

새로운 CoreData 모델 스키마로 자동 마이그레이션 매핑을 만들려고합니다. 새로운 버전의 앱을 만들고, 스키마를 변경했으며, 새로운 애플리케이션으로 이전 데이터를 새 스키마로 마이그레이션하려고합니다. 나는 생각한다. –

+0

그래, 맞아. 핵심 데이터 스키마를 업데이트했고 데이터 저장소의 내용을 잃고 싶지 않아 현재 데이터 저장소를 새 스키마 버전으로 마이그레이션해야합니다. 저는 이것이 사실 Xcode의 버그라고 생각하기 시작했습니다. 특히 무한 루프를 생성하는 반사적 인 관계를 가진 모델 매핑 파일의 디코딩/컴파일에 ... 저는 코코아 (cocoa- dev, 거기에 답장을 보내면 여기에 다시 게시됩니다. –

답변

6

좋아, 그래서 "포함"것처럼 보인다는 예약어 수 있습니다, 이러한 요구로 "#"을 사용하여 이스케이프. 마이그레이션시 The Apple docs은 예약어로 명시 적으로 언급하지 않지만 명확한 목록이 무엇인지는 명시하지 않습니다.

하지만 속성 이름은 NSObject 또는 NSManagedObject 메서드 이름 (예 : "description")과 같을 수는 없으며 분명히 "contains"인 것처럼 보입니다.

관련 문제