【发布时间】:2013-07-22 13:23:06
【问题描述】:
因此,我遇到了一个相当流行的问题,即在应用程序的新版本发布时更新我的核心数据驱动应用程序中的 SQL 数据。
应用机制的快速总结
我有一个控制台应用程序,它使用与我的应用程序相同的 xcdatamodeld 文件,我在其中预填充了 SQL 数据库(sqlite 文件)。然后我在我的应用程序中使用这个文件来预填充数据。
问题是,每次我运行这样的更新(通常是每月一次)时,文档文件夹都会被保留,应用程序会忽略新数据并在新数据应该在的位置显示空白页。这显然可以通过删除和重新安装应用程序来解决,但这对于每月需要新内容的用户来说太麻烦了。
到目前为止我已经尝试过什么
-我被建议查看核心数据迁移文档并使用“数据模型版本控制”。这对我不起作用,因为我的问题是实际数据而不是模型。模型保持不变,只是它提供的数据发生了变化。
- 我尝试每天从 Web 服务加载 JSON 文件以避免需要更新应用程序本身,但我收到了客户的投诉,称用户想要的主要功能之一是离线访问.特别是对于那些移动互联网接入相当昂贵且不可靠的国家/地区的人。
-以上原因排除了stackmob等其他解决方案
经过阅读和思考,我觉得这可能有效;
编写代码以在应用启动期间检查现有数据库。如果现有数据库与新数据库不同(我计划使用某种数字相关条件,例如版本 no1
在这个阶段,我愿意接受任何其他可以让我预先填充数据库并每月更新数据库而无需担心的想法。 (我不介意从头开始重新编写应用程序)。
欢迎任何帮助。 [不要让我对 Markdown 的掌握欺骗了你,我是初学者;) ]
【问题讨论】:
-
我会向 NSUserDefaults 添加一个 VersionKey 并从 CoreData 中删除旧的 .sqlite 文件并从新文件中创建它。或者每次更新应用时将其重命名为 .sqlite 存储文件,但这可能会使您的文档目录因不必要的数据而混乱。
-
我看到了你的角度。我是否可以在我的 applicationDidFinishLaunching... 中访问此 VersionKey?原谅我的天真,但我将此版本密钥设置为什么“属性”? .sqlite 还是别的什么?
-
raywenderlich.com/12170/… 看看这个,会为你指明正确的方向!
-
您好 Julien,感谢您的建议。第一个修复工作。我能够更改 sqlite 文件名并且它可以工作:) 如果您想要获得的声誉,您可以用您的第一个 cmets 回答这个问题,以便我可以接受它作为答案吗?再次感谢:)
标签: ios sql sqlite core-data core-data-migration