我在Mac OS X 10.5上使用Core Data时遇到了一个令人讨厌的错误。核心数据迁移验证错误
所有的实体在我的应用程序中有共享相同名称的类。
到目前为止,我已经完成了5次迁移,没有任何问题。
我正在使用XML数据存储。 我有13个实体的V5数据模型,其中4个是抽象的。它看起来像这样: alt text http://synapticmishap.co.uk/ObjectModel.jpg
我做什么
创建我的数据的新版本 模型 - 这是V6。
添加一个新的实体(JGToolbarWindow) 并将父项设置为JGWindowBase。
添加了从 V5到V6的映射模型。保存它。
将当前版本设置为V6。
构建和调试。
我已经在Persistent Store Coordinator选项字典中打开了自动迁移。
的问题
得到一个错误 - “多重验证发生 错误。”
我设置了一个断点并检查了 验证错误。有很长的 验证错误列表 - 那里 似乎是每个数据项的一个。
看来,它剥离了所有 的关系,因为我的 属性之一 - 应用 - 设置为 需要,这算作一个 验证错误。
如此看来,问题在于不能够迁移 的关系......即使 明显没有已远 的关系去改 迁移。
当我看到在〜/库/应用程序支持 /我的应用程序的名称/我看到那种有由.xml.new附加当 这个文件将在文本寻找同名 一个XML 数据存储编辑,所有 关系确实已被剥离出 。
我已经试过
创建一个新的XML数据存储和 把几件作品在里面,然后 重试。我为每个项目获得相同的 错误。
清洁和重建。
确保旧的.xml.new从 以前的验证已被删除,其中 已删除。
删除新的模型版本和 重复我的行动,以确保我 没有搞砸了。
为 中的每个 添加映射条目,默认情况下会忽略抽象类 。添加了所有 属性和关系。还是 完全一样的错误。
尝试添加具有 JGWindowBase作为父项的新实体 没有一类,只是根据 NSManagedObject。再次, 失败。
我能想到的唯一改变的是我在模型的基础类中的一些内部逻辑。但这些都是微小的变化,我无法理解它是如何迁移的好,现在不是什么都没有改变。
我试过了一个全新的从最新的数据存储迁移过来的迁移,并且有完全相同的问题。这意味着我必须解决这个问题,任何数据迁移工作。
错误
当我把一个断点在presentError线以下
if (![persistentStoreCoordinator addPersistentStoreWithType:NSXMLStoreType
configuration:nil
URL:url
options:options
error:&error]){
[[NSApplication sharedApplication] presentError:error];
}
并检查错误用户信息,我得到很多的错误是这样的:
Error Domain=NSCocoaErrorDomain Code=1570 UserInfo=0x67ebfd0 "item is a required value."
po (NSArray *)0x67ebfd0
给出:
NSLocalizedDescription = "item is a required value.";
NSValidationErrorKey = item;
NSValidationErrorObject = <NSManagedObject: 0x45d5830> (entity: JGLogEntry; id: 0x4baccb0 <x-coredata://B597E13E-BE74-402E-BF00-5E1D57898406/JGLogEntry/p13942> ; data: {
duration = nil;
item = nil; // <<< Here's the problem.
processBundleID = nil;
processID = nil;
processName = nil;
startTime = 2009-10-09 16:41:44 +0100;
stopTime = 2009-10-09 16:42:17 +0100;
windowDocumentPathOrURL = nil;
windowID = nil;
windowTitle = nil;
这一切真的告诉我的是,它删除连接到项目的关系,这是一个必需的属性,它就是为什么它告诉我有验证错误。应用程序也有整个负载,这是另一个必需的属性。
正如我所看到的那样,问题不在于验证错误,因为它似乎不会迁移任何关系在所有。
我把我的头发拉出来。我真的很感激一些帮助。最后,星球大战报价:
“帮帮我,堆栈溢出。你是我的 唯一的希望。”
你真的能向我们展示一个验证错误的例子吗? – 2009-10-13 19:42:49
我的回忆是,涉及抽象基础关系的映射很困难。确切的错误可能有助于指向正确的方向。 – 2009-10-13 19:43:48
感谢评论,巴里。我发布了一些错误的东西。我只是不明白我如何能够成功地迁移抽象基类的2/3倍,但没有改变任何东西,它突然间就会对我产生影响。 – 2009-10-13 22:39:27