0

好的,所以我更改了 xcdatamodel 以在所有 3 个新“表”上包含一个新属性,默认值为 1。我对 Core Data 相当陌生,但非常习惯于 SQL 和 SQLite 数据库。我清理了 iphone 模拟器,使用 addPersistentStoreWithType:NSSQLiteStoreType 的“特殊”选项进行构建,该选项进行了轻量级迁移并立即生效。我可以更改我的谓词以包含这个新属性,这很好。

我应该注意,我有一个现有的 .sqlite 文件,该文件是项目的资源,在编译/运行时会被复制到应用程序中。这个 sqlite 文件在 iphone 模拟器上永远不会改变。

我现在需要获取我现有的数据行并将其中一些值更改为 2 或 3 用于排序和显示目的。我希望轻量级迁移会给我一个新的 sqlite 文件,我可以将它复制回一个不错的位置,然后使用 Navicat 更改这些值并覆盖 xcode 资源中的 sqlite 文件并删除特殊选项位并保持良好状态. 但是我没有得到一个新的 sql 文件,而是做了一些其他的“魔法”。

因为它看起来像 Core Data 只是接受属性并向它们添加 Z 我尝试添加 ZATTRIBUTENAME 列并使用我的新 xcdatamodel 文件但我收到错误“用于打开商店的模型与用于创建商店的模型不兼容” .

我不在乎苹果说不要用 SQL 编辑器编辑这些文件,因为它可能会把事情搞砸。所以请不要告诉我你的“不应该那样做”。不难看出核心数据方案和 sql 中发生了什么。问题是我无法使用新属性来编辑新的 sqlite 文件。

简而言之,我想我只是想弄清楚如何获取由新 xcdatamodel 生成的新 sqlite 文件,然后我可以复制和编辑该文件。我已经研究了几天,运气不好。

非常感谢您提前提供的帮助。

4

1 回答 1

0

首先,你会原谅我指出“你不应该那样做”。;-)

其次,您似乎只需要生成一个新的“种子”文件即可包含在您的应用程序中。显然,该文件没有被更改。根据您的描述,它不是核心数据文件。

至于你迁移后的新核心数据文件,是的,它是一个具有新数据模型的新文件,旧的没有了。您当然可以打开该文件并摆弄它,或者您可以使用代码中的核心数据来完成。

我是这样做的:在您的项目中,编写一些代码只是为了生成新的种子文件(它可以是核心数据,或者只是使用 sqlite API),并在成功创建后禁用或删除代码新版本。您现在可以将此文件复制到您的包中并作为种子文件提供。

于 2012-07-25T20:47:35.823 回答