核心数据:具有自引用属性的迁移实体

Dan*_*rpe 0 cocoa core-data core-data-migration self-reference mapping-model

My Core Data模型包含一个实体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
Run Code Online (Sandbox Code Playgroud)

'contains'是其中一个自引用属性的名称.无论如何,真正的大问题是,当我在查看映射模型时选择实体映射时,我甚至无法查看此映射属性,因为Xcode崩溃了.所以我有点失落,真的从哪里开始.我真的无法删除自引用属性,所以我想我已经手动创建了一个编译的映射模型?有任何想法吗?

干杯

Dan*_*rpe 6

好吧,似乎"包含"可能是一个保留字,因此需要使用"#"进行转义.有关迁移的Apple文档没有特别提及它作为保留字,尽管它们也没有说明最终列表是什么.

但是,似乎属性名称不能与任何NSObject或NSManagedObject方法名称相同,例如"description",并且显然是"包含".