gpt4 book ai didi

objective-c - 核心数据迁移的验证错误

转载 作者:行者123 更新时间:2023-12-03 16:48:32 26 4
gpt4 key购买 nike

我在 Mac OS X 10.5 上使用 Core Data 时遇到了一个非常烦人的错误。

我的应用程序中的所有实体都具有共享相同名称的类。

到目前为止,我已经完成了 5 次迁移,没有出现任何问题。

我正在使用 XML 数据存储。我的数据模型 V5 包含 13 个实体,其中 4 个是抽象的。它看起来像这样: alt text http://synapticmishap.co.uk/ObjectModel.jpg

我做什么

  1. 创建我的数据的新版本型号 - 这是 V6。

  2. 添加新实体 (JGToolbarWindow)并将父级设置为 JGWindowBase。

  3. 添加了一个映射模型,来自V5至V6。已保存。

  4. 将当前版本设置为V6。

  5. 构建和调试。

我已在持久存储协调器选项字典中打开自动迁移。

问题

  1. 收到错误 - “多重验证发生错误。”

  2. 我设置了一个断点并检查了验证错误。有一个很长的验证错误列表 - 那里似乎每个数据输入都是一个。

  3. 似乎它正在剥离所有的关系,因为我的一位属性-应用程序-设置为是必需的,这算作验证错误。

  4. 看来问题出在迁移无法迁移关系...尽管显然到目前为止一切都没有改变随着关系的发展。

  5. 当我查看 ~/Library/Application 时支持/我的应用程序名称/我看到一个 XML具有相同名称的数据存储附加 .xml.new 查看时这个文件在文本编辑器中,所有的关系确实已经被剥离。

我尝试过的

  1. 创建新的 XML 数据存储并将一些元素放入其中,然后再试一次。我也得到同样的结果每个项目的错误。

  2. 清理和重建。

  3. 确保旧的 .xml.new 来自先前的验证已已删除。

  4. 删除新模型版本并重复我的行动以确保我没有搞砸什么。

  5. 为每个添加映射条目抽象类,它们是默认忽略。添加了全部属性和关系。仍然完全相同的错误。

  6. 尝试添加一个新实体没有类,只是基于NSManagedObject 其中有JGWindowBase 作为父级。再次,失败。

我认为唯一发生变化的是模型底层类中的一些内部逻辑。但这些都是微小的变化,我无法理解它是如何顺利迁移的,而现在似乎没有任何变化。

我尝试从重命名的最新数据存储进行全新迁移,但遇到了完全相同的问题。这意味着我必须解决这个问题才能使任何数据迁移工作正常进行。

错误

当我在下面的 presentError 行放置断点时

if (![persistentStoreCoordinator addPersistentStoreWithType:NSXMLStoreType
configuration:nil
URL:url
options:options
error:&error]){
[[NSApplication sharedApplication] presentError:error];
}

并检查错误 userInfo,我收到很多这样的错误:

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;

这一切真正告诉我的是,它删除了连接到项目的关系,这是一个必需的属性,这就是为什么它告诉我存在验证错误。应用程序也有一个完整的负载,这是另一个必需的属性。

据我所知,问题不在于验证错误本身,而在于它似乎根本没有迁移任何关系

我正在为此抓狂。我真的非常感谢一些帮助。最后,引用《星球大战》中的一段话:

"Help me, Stack Overflow. You're my only hope."

最佳答案

升级到雪豹

Snow Leopard 似乎解决了这个问题 - 自升级以来我在迁移数据方面没有遇到任何问题。

或者,我认为它可能会消失,因为我切换到 SQLite 数据存储,尽管我认为抽象对象的迁移在 Leopard 上可能有点损坏。

关于objective-c - 核心数据迁移的验证错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1561981/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com