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”。