我在Mac OS X 10.5上使用核心数据时遇到了一个非常恼人的错误。
在我的应用程序中,所有实体都有共享相同名称的类。
到目前为止,我已经进行了5次无问题的迁移。
我正在使用XML数据存储。
我的数据模型有13个实体,其中4个是抽象的。看起来是这样的:
alt text http://synapticmishap.co.uk/ObjectModel.jpg
我做什么
-
创建我的数据的新版本
型号-这是V6。
-
添加新实体(jgtoolbarWindow)
并将父级设置为jgWindowBase。
-
添加了一个映射模型,
V5至V6。救了它。
-
将当前版本设置为V6。
-
生成和调试。
我在Persistent Store Coordinator Options字典中打开了自动迁移。
问题
-
获取错误-“多次验证
出现错误。“
-
我设置了一个断点并检查了
验证错误。有一个很长的
验证错误列表-存在
似乎每个数据条目都是一个。
-
似乎它正在剥离所有
因为我的关系
属性-应用程序-设置为
必须输入,这算作
验证错误。
-
所以问题似乎在于
迁移无法迁移
关系…尽管
显然到目前为止没有什么变化
随着关系的发展。
-
当我在~/library/application中查找时
支持/我的应用的名称/我看到一个XML
具有相同名称的数据存储
在查看时附加了.xml.new
此文件在文本编辑器中,所有
关系确实是
剥去
我试过什么
-
创建新的XML数据存储并
把一些东西放进去,
然后再试一次。我也一样
每个项目的错误。
-
清洁和重建。
-
确保旧的.xml.new来自
以前的验证已
删除。
-
删除新模型版本和
重复我的行动以确保我
没有搞砸什么。
-
为每个添加映射项
抽象类,它们是
默认情况下忽略。添加所有
属性和关系。仍然
完全相同的错误。
-
尝试添加一个新实体
没有课程,只是基于
NSManagedObject具有
JgWindowBase作为父级。再一次,
失败。
我能想到的唯一改变是我在模型底层的类中的一些内部逻辑。但这些都是微小的变化,我无法理解它是如何迁移的,现在看来并不是什么都没有改变的时候。
我尝试过从一个重新命名的最新数据存储区进行全新的迁移,但问题完全相同。这意味着我必须解决这个问题
任何
数据迁移到工作。
错误
当我在下面的演示者行放置断点时
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;
所有这些都告诉我它已经删除了连接到项的关系,这是一个必需的属性,这就是它告诉我存在验证错误的原因。应用程序也有一个完整的负载,这是另一个必需的属性。
如我所见,问题不在于验证错误,因为它似乎没有迁移
任何关系
.
我要用这个把头发拔出来。我真的非常感谢你的帮助。最后,一句星球大战的名言:
“帮帮我,堆栈溢出。你是我的
只有希望。”