问题标签 [mapping-model]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
1921 浏览

macos - 没有“文档已更改”警告的手动核心数据模式迁移?

我的基于 Core Data 文档的应用程序(仅限 10.5)的数据模型位于框架中,因此使用 Core Data 映射模型的自动模式升级似乎不起作用。当 Core Data 机器不在应用程序的主包中时,它们似乎找不到合适的数据模型或映射模型。因此,我没有使用自动迁移,而是 configurePersistentStoreCoordinatorForURL:ofType:...在我的 NSPersistenDocument子类(下面的代码)。我将持久存储迁移到一个临时文件,然后在迁移成功时覆盖现有文件。然后该文档显示错误消息“自从您打开或保存此文档的文件已被另一个应用程序更改”。当我尝试保存时。正如此列表中的其他人所指出的,这是由于我在“背后”修改了文档的文件。我尝试更新文档的文件修改日期,如下所示,但随后出现错误对话框,显示消息“无法确定文档“test.ovproj”的位置。” 当我尝试保存时。我不太确定这个错误的原因,但是将一个不必要的消息(在这种情况下)换成另一个并不是我想要的。

任何人都可以提供一些指导吗?有没有办法手动升级文档持久存储的架构而不触发其中一个(在这种情况下是不必要的)警告?

用于升级我的子类中的数据存储的代码 -configurePersistentStoreCoordinatorForURL:ofType:...

0 投票
8 回答
23656 浏览

iphone - 在我的 Xcode 数据模型发生任何更改后,我不断收到“保存操作失败”

我开始使用 Core Data 进行 iPhone 开发。我首先创建了一个非常简单的实体(称为评估),它只有一个字符串属性(称为评估主题)。我有以下用于插入新字符串的代码:

这工作得非常好,通过按下 + 按钮,一个新的“我的重复字符串”将被添加到表视图中并保存在持久存储中。

然后我在 Xcode 中按下“设计 - > 添加模型版本”。我向现有实体添加了三个实体,并向现有的“评估”实体添加了新属性。然后,我通过按“文件 -> 新文件 -> 托管对象类”从实体中创建了新文件,并为我的四个实体创建了一个新的 .h 和 .m 文件,包括带有 Evaluation.h 和 Evaluation 的“Evaluation”实体.m。现在我通过设置“设计 -> 数据模型 -> 设置当前版本”来更改模型版本。完成所有这些后,我更改了我的 insertMethod:

这虽然行不​​通!每次我想添加一行时,模拟器都会崩溃,我得到以下信息:

在更改数据模型上的任何内容后,我在知道创建新版本之前就遇到了这个错误,但为什么这仍然会出现?我是否需要进行任何映射(即使我只是添加了以前不存在的实体和属性?)。在 Apple Dev 教程中,这听起来很简单,但我一直在努力解决这个问题,在更改模型版本后从未工作过。

0 投票
2 回答
4021 浏览

iphone - 跨多个版本升级的核心数据迁移

我有一个使用 Core Data 的 iPhone 应用程序。

我进行了更新并使用轻量级迁移从我的 MOM(托管对象模型)的 V1 到 V2。这非常有效。

当我想进入 MOM 的 V3(及更高版本)时会发生什么?

  • 如果我决定继续进行轻量级迁移,它会自动处理从 MOM 的 V1 到 V3 和 V2 到 V3 的迁移,还是我需要做一些额外的事情?
  • 如果我决定使用映射模型,会发生什么?如何将 V1 和 V2 MOM 升级到 V3?我需要为 V1 到 V3 和 V2 到 V3 创建一个映射模型吗?
  • 这个问题更进一步......当我拥有 V6 MOM 并且仍然需要支持从 V1 MOM 升级的可能性时会发生什么?

另一个问题是确定当前 MOM 版本的最佳方法是什么?我应该使用 isConfiguration:compatibleWithStoreMetadata:

感谢您提供任何帮助。我喜欢核心数据。但它有时让我头晕目眩,我感到困惑,这就是为什么我要寻求一些圣人的智慧。

0 投票
1 回答
1939 浏览

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

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

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

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

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

我所做的

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

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

  3. 添加了从 V5 到 V6 的映射模型。保存了它。

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

  5. 构建和调试。

我在 Persistent Store Coordinator 选项字典中打开了自动迁移。

问题

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

  2. 我设置了一个断点并检查了验证错误。有一长串验证错误——似乎每个数据条目都有一个。

  3. 似乎它正在剥离所有关系,并且由于我的属性之一 - 应用程序 - 被设置为必需,这被视为验证错误。

  4. 因此,问题似乎在于迁移无法迁移关系......即使就关系而言显然没有任何改变。

  5. 当我查看 ~/Library/Application Support/Name of my app/ 我看到一个 XML 数据存储,它的名称附加了 .xml.new 在文本编辑器中查看此文件时,所有关系确实已被剥离出去。

我试过的

  1. 创建一个新的 XML 数据存储并在其中放入一些项目,然后再试一次。我对每个项目都得到相同的错误。

  2. 清洁和重建。

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

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

  5. 为每个抽象类添加映射条目,默认情况下会被忽略。添加了所有属性和关系。仍然是完全相同的错误。

  6. 尝试添加一个没有类的新实体,仅基于以 JGWindowBase 作为父级的 NSManagedObject。再一次,失败了。

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

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

错误

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

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

po (NSArray *)0x67ebfd0

给出:

所有这一切真正告诉我的是它删除了与项目相关的关系,这是一个必需的属性,这就是它告诉我存在验证错误的原因。应用程序也有一个完整的负载,这是另一个必需的属性。

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

我用这个把头发拉出来。我真的非常感谢一些帮助。最后,引用《星球大战》中的一句话:

“帮帮我,Stack Overflow。你是我唯一的希望。”

0 投票
2 回答
344 浏览

cocoa - 迁移核心数据存储时显然随机崩溃

我正在尝试在我的 Mac OS X Leopard 应用程序中迁移 Core Data SQLite 存储。迁移本身很简单,模型版本之间只有一些更改,并且有一个自定义NSEntityMigrationPolicy可以进行一些字符串操作。

99% 的时间,这都能完美运行。但是,有时它会EXC_BAD_ACCESS在 inobjc_assign_strongCast下崩溃migrateStoreFromURL: type: options: withMappingModel: toDestinationURL: destinationType: destinationOptions: error:

此时,我的自定义迁移策略尚未被调用,所以我认为这不是导致它的原因。我还三次检查了我的映射模型文件,一切似乎都很好。

更重要的是,如果我只是尝试再次迁移同一个文件它通常可以正常工作。我不知道从哪里开始调试它,所以欢迎任何指针!

0 投票
1 回答
1290 浏览

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

我的核心数据模型包含一个实体 Shape,它有两个自引用关系,这意味着四个属性。一对是一对多关系(Shape.containedBy <->> Shape.contains),另一对是多对多关系(Shape.nextShapes <<->> Shape.previousShapes)。这一切都在应用程序中完美运行,所以我不认为自引用关系通常是一个问题。

但是,在将模型迁移到新版本时,Xcode 无法编译自动生成的映射模型,并显示以下错误消息:

“包含”是自引用属性之一的名称。无论如何,真正的大问题是我什至无法查看此映射属性,因为在查看映射模型时,一旦我选择实体映射,Xcode 就会崩溃。所以我有点迷失从这里去哪里。我真的无法删除自引用属性,所以我想我已经手动创建了一个可以编译的映射模型?有任何想法吗?

干杯

0 投票
4 回答
3682 浏览

iphone - 核心数据迁移映射模型的问题

我有一个使用 Core Data 进行存储的 iphone 应用程序。我已经成功部署了它,现在我正在开发第二个版本。我遇到了数据模型的问题,在升级持久存储时需要进行一些非常简单的数据转换,所以我不能只使用默认的推断映射模型。

我的对象模型存储在 .xcdatamodeld 包中,版本 1.0 和 1.1 彼此相邻。版本 1.1 设置为活动版本。当我使用默认迁移行为并将 NSInferMappingModelAutomaticallyOption 设置为 YES 时,一切正常。我的 sqlite 存储从模型的 1.0 版本升级,一切都很好,当然,除了我需要做的一些转换。

作为一个额外的实验步骤,我在核心数据模型包中添加了一个新的映射模型,并且没有对 xcode 生成的内容进行任何更改。当我运行我的应用程序(使用旧版本的数据存储)时,我得到以下信息

我究竟做错了什么?这是我获取托管对象模型和持久存储协调器的代码。

0 投票
1 回答
985 浏览

iphone - 如何在 Core Data 迁移映射中拆分实体

看起来这应该是直截了当的,但我找不到一个很好的例子。我有一个简单的核心数据实体,我想将其拆分为两个单独的实体。Apple 的文档在较高级别(映射概述)中提到了它,但是,将与新拆分实体的关系关联回原始实体的实际映射模型应该是什么样子尚不清楚。

0 投票
2 回答
6461 浏览

cocoa - 处理核心数据模型更改

我知道如果您更改 Core Data 模型并且之前在旧模型上运行过应用程序,您将收到 Persistent Store 错误。您将如何处理对 Core Data 模型的更改,以免出现此错误?有没有办法升级旧模型,使已经保存的数据不丢失?

0 投票
1 回答
246 浏览

iphone - 我什么时候想使用 NSPropertyMapping?

它与不同数据模型之间的映射有关吗?这与其他哪些 Core Data 类相关?对我来说,它属于哪里并不太明显。合并数据模型?或者这只是一个独立的东西?

例如,我什么时候使用 NSPropertyMapping?