【发布时间】:2015-05-14 13:30:56
【问题描述】:
我试图找到发布带有一些预加载数据的应用的最佳方式。 我有一个有 2 个表的应用程序。我想用一些数据填充这些表。问题是数据不仅仅是文本信息。 1 个实体包含大约 40 个属性(数字、字符串、可转换数据),因此将其嵌入代码中不是解决方案。
感谢您的帮助。
【问题讨论】:
标签: xcode swift core-data osx-yosemite
我试图找到发布带有一些预加载数据的应用的最佳方式。 我有一个有 2 个表的应用程序。我想用一些数据填充这些表。问题是数据不仅仅是文本信息。 1 个实体包含大约 40 个属性(数字、字符串、可转换数据),因此将其嵌入代码中不是解决方案。
感谢您的帮助。
【问题讨论】:
标签: xcode swift core-data osx-yosemite
NSFileManager 会告诉你);从您的应用程序包中复制 SQLite 文件。这使得程序可编写脚本且一致。它重用您现有的代码结构来构建预先填充的数据库,并让您保持最新状态。
【讨论】:
我是这样处理的:
我使用默认设置,其中核心数据的后备存储是一个 SQL 文件。
我将我的应用设置为使用应用文档目录中的 SQL 文件设置持久存储协调器。
我在模拟器上构建我预先填充的核心数据数据库。
然后我转到 sim 上的应用程序文档目录并将 sql 文件复制到应用程序的包中。
在应用程序委托中我的应用程序的 didFinishLaunching 方法的开头,我检查了核心数据数据库的 sql 文件是否存在于文档目录中。如果没有,我将它从捆绑包中复制到文档目录中。
然后我调用创建持久存储协调器的代码,它需要文档目录中的 sql 文件。首次启动时,这是从捆绑包中复制的初始文件。在后续启动时,文档目录中的工作文件包含当前数据。
【讨论】:
xcodebuild 或在 Xcode 本身中使用构建步骤来自动化您的构建。
当用户第一次尝试访问数据时,通过执行获取请求或获取持久存储中的对象计数来运行检查以查看持久存储中是否有任何对象。
如果 fetch 请求的结果为 nil,或者 fetch 请求的对象数为 0,则手动将某个文件(JSON、plist、XML)中的数据加载到 Core Data 中。
【讨论】: