我目前正在做你列出的事情(减去用户友好的界面,我的只是一个命令行工具)。它工作得很好,我构建并运行该工具,它使用 plist 文件重新生成我的核心数据持久存储 sqlite 数据库。当您推出您的应用程序时,具有相同文件名的文件将被覆盖。如果您的 Core Data 的 sqlite db 名为“asdf.sqlite”,那么您只需确保它包含在您的新包中,它将替换旧包。
但是,在更改数据模型时要小心。在这种情况下,您需要执行数据模型迁移并将旧模型映射到新模型。如果您尝试使用较旧的数据模型访问核心数据持久存储,则会遇到运行时错误。
如果没有人对数据模型进行过更改,那么您就可以了。只需使用您的自定义工具来重建数据库,您就可以将项目交给其他人。
回复:
至于重新生成核心数据
持久存储...究竟是怎样的
你完成这个?你怎么
知道何时更新商店或做
您每次创建商店
应用运行了吗?
我的命令行应用程序具有与 iPhone 应用程序相同的数据模型和实体源代码的引用(符号链接)(这样 iPhone 项目中的更改将可用于我的命令行工具)。我的项目寻找一个 plist 文件,我必须对应用程序进行自定义编程以运行整个 plist 文件并将该信息添加到核心数据数据库中。每次我运行应用程序时,它都会删除旧的 sqlite 文件并用新文件替换它。因此,如果我需要让其他人管理我的应用程序,他们只需要知道如何修改该 plist 文件以及如何运行命令行应用程序。 Out 会在构建应用程序的调试文件夹中弹出一个 sqlite 数据库。
我的应用程序是一个参考工具,所以我只需要在参考材料发生变化时更新我的核心数据db。当我进行更改时,我会将生成的 sqlite 文件复制到我的 iPhone 项目中,并确保它被复制到应用程序包中。
顺便说一句,这种方法仅适用于您计划在您的应用中发送只读数据的情况。如果在使用部署的应用程序时将写入相同的持久存储,那么每次更新它时,用户的更改都会丢失。您可以通过使用多个存储(一个用于只读,一个用于用户写入的数据)来解决此问题。
我描述的方法假设您仅通过应用商店更新对核心数据数据库进行更新。如果您的核心数据生成代码在您的 iphone 应用程序中,那么您可以在每次应用程序运行时重新生成代码,但如果数据是静态的并且预计在您更新应用程序之前不会更改,则不需要它。
回复:
您的应用程序是否重建了 sqlite 数据库
每次运行时的文档文件夹
也一样?
简短回答:不,我的 iPhone 应用程序不会在每次运行时重建 sqlite 数据库。我的 iPhone 应用从不重建数据库。
长答案:再次澄清,有两个应用程序。 App1是使用核心数据db的iPhone应用,App2是生成核心数据db的桌面应用。最初,只有 App1,即 iPhone 应用程序。每次 iPhone 应用程序运行时,它都会从 plist (XML) 文件中重新生成 sqlite db。由于我的数据库非常大,因此我的应用程序的加载时间增加了很多。这是不可接受的,所以我这样做是为了让 iPhone 应用程序仅在找不到 db 文件时才生成 db(表明该应用程序是第一次运行)。然后我意识到第一次没有必要让应用程序加载时间过长,所以我从我的 iPhone 应用程序中完全删除了该代码,并制作了一个单独的 Mac OSX 命令行应用程序 app2 来处理生成 sqlite db。这个程序 app2 只在我的电脑上运行,所以我必须把生成的 sqlite 文件手动放到我的 iPhone app1 项目中。这个重建的 sqlite db 文件只有在我向 App Store 提交更新时才对用户可用。