向核心数据添加属性但无法获取 SQL 文件以匹配
Posted
技术标签:
【中文标题】向核心数据添加属性但无法获取 SQL 文件以匹配【英文标题】:Adding Attribute to Core Data but can't get SQL file to match 【发布时间】:2012-07-25 20:37:06 【问题描述】:好的,所以我更改了 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 文件,然后我可以复制和编辑该文件。我已经研究了几天,运气不佳。
非常感谢您提前提供的帮助。
【问题讨论】:
【参考方案1】:首先,请原谅我指出“你不应该这样做”。 ;-)
其次,您似乎只需要生成一个新的“种子”文件即可包含在您的应用程序中。显然,该文件没有被更改。根据您的描述,它不是核心数据文件。
至于你迁移后的新核心数据文件,是的,它是一个新数据模型的新文件,旧的没有了。您当然可以打开该文件并摆弄它,也可以使用代码中的核心数据来完成。
我是这样做的:在您的项目中,编写一些代码只是为了生成新的种子文件(它可以是核心数据,或者只是使用 sqlite API),然后禁用或删除代码成功创建新版本。您现在可以将此文件复制到您的包中并作为种子文件提供。
【讨论】:
您好,感谢您的快速回复。正如我所说的对这个核心数据位的新手,它需要 xcdatamodel 文件在代码中“理解”它,这不是让它成为核心数据文件吗?我不知道,总有一天我会 :) 你说的是像“行”数据一样插入到我的表中以生成新文件?精简版迁移对我来说并没有这样做。基本上我需要“重新开始”?对吗? 没有。迁移将负责更新数据模型。您将不得不更新数据。如果您有一些种子数据(文本文件、plist、xml 文件、sqlite 数据库),则必须按照我的描述将这些数据插入到“种子”核心数据存储中来复制这些数据。 很抱歉再次对此进行扩展。我有一个新的 sqlite 数据库,其中包含种子数据。当我使用此文件时,它给我一个错误“用于打开商店的模型与用于创建商店的模型不兼容”。如果我使用原始版本,我不会收到错误消息。我想当它归结为它时,我不知道该怎么做。有人可以租来做这部分吗?我不会在 iPhone 应用方面做太多事情,这让我很生气。 你为什么不试试我推荐的?将旧数据导入新模型,例如AppDelegate.m
。完成后,停用代码。现在复制新的 SQLite 存储来替换旧的。以上是关于向核心数据添加属性但无法获取 SQL 文件以匹配的主要内容,如果未能解决你的问题,请参考以下文章