0

我的核心數據模型包含一個實體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就會崩潰。所以我有點失落,真的要從這裏出發。我真的不能刪除自我指涉的屬性,所以我想我已經手動創建了一個編譯的映射模型?有任何想法嗎?

乾杯

+0

當您說「將模型遷移到新版本」是應用程序的新版本,Xcode,OS? – TechZen 2009-10-30 19:51:12

+0

我相信他正在嘗試創建一個新的CoreData模型模式的自動遷移映射 - 創建他的應用程序的更新版本,他改變了模式,並希望讓新的應用程序將舊數據遷移到新模式。我認爲。 – 2009-10-30 21:49:46

+0

是的,這是完全正確的。我已經更新了我的Core Data模式,並且不想丟失數據存儲的內容,因此我需要將當前數據存儲遷移到我的模式的新版本。 我開始認爲這實際上是Xcode中的一個錯誤,特別是在模型映射文件的解碼/編譯過程中,它會產生某種無限循環的自反關係......我會問可可 - 如果我在那裏得到回覆,dev會回到這裏。 – 2009-11-02 11:00:10

回答

6

好了,它好像「包含」可能是保留字,因此需要使用「#」進行轉義。關於移民的The Apple docs沒有具體提及它作爲保留字,儘管他們也沒有說明確切列表是什麼。

但是,似乎屬性名稱不能與任何NSObject或NSManagedObject方法名稱相同,如「description」,並且顯然是「contains」。