代码之家  ›  专栏  ›  技术社区  ›  Daniel Thorpe

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

  •  0
  • Daniel Thorpe  · 技术社区  · 15 年前

    我的核心数据模型包含一个实体shape,它有两个自引用关系,这意味着四个属性。一对是一对多关系(shape.contained by<->>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
    

    “contains”是一个自引用属性的名称。总之,真正的大问题是,当我在查看映射模型时选择实体映射时,我甚至不能查看XCODE崩溃的映射属性。所以我真的有点不知所措。我真的无法删除自引用属性,所以我想我已经手动创建了编译的映射模型了吗?有什么想法吗?

    干杯

    1 回复  |  直到 15 年前
        1
  •  6
  •   Daniel Thorpe    14 年前

    好吧,看来“contains”可能是一个保留字,因此需要用“”来转义。 The Apple docs 关于迁移,并没有特别提到它是一个保留词,尽管他们也没有说确切的列表是什么。

    但是,似乎属性名不能与任何nsobject或nsmanagedobject方法名相同,例如“description”,并且显然是“contains”。