我的核心數據模型包含一個實體Shape,它具有兩個自引用關係,這意味着四個屬性。一對是一對多關係(Shape.containedBy < - >> Shape.contains),另一個是多對多關係(Shape.nextShapes < < - >> Shape.previousShapes)。它在應用程序中都能很好地工作,所以我不認爲自我引用關係通常是一個問題。核心數據:具有自引用屬性的遷移實體
然而,當涉及到模型遷移到新的版本,那麼Xcode中無法編譯自動生成的映射模式,與此錯誤消息:
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就會崩潰。所以我有點失落,真的要從這裏出發。我真的不能刪除自我指涉的屬性,所以我想我已經手動創建了一個編譯的映射模型?有任何想法嗎?
乾杯
當您說「將模型遷移到新版本」是應用程序的新版本,Xcode,OS? – TechZen 2009-10-30 19:51:12
我相信他正在嘗試創建一個新的CoreData模型模式的自動遷移映射 - 創建他的應用程序的更新版本,他改變了模式,並希望讓新的應用程序將舊數據遷移到新模式。我認爲。 – 2009-10-30 21:49:46
是的,這是完全正確的。我已經更新了我的Core Data模式,並且不想丟失數據存儲的內容,因此我需要將當前數據存儲遷移到我的模式的新版本。 我開始認爲這實際上是Xcode中的一個錯誤,特別是在模型映射文件的解碼/編譯過程中,它會產生某種無限循環的自反關係......我會問可可 - 如果我在那裏得到回覆,dev會回到這裏。 – 2009-11-02 11:00:10