【问题标题】:Prefilling Core Data for a read-only application为只读应用程序预填充核心数据
【发布时间】:2009-11-12 03:52:36
【问题描述】:

我正在开发一个显示我正在运送的只读数据的应用程序。 它更像是一本书。

使用 SQLite 很容易,但我对性能和尝试使用 Core Data 不满意。

问题在于预填充核心数据是一个艰难的过程。

我的问题是: 是否可以构建一个使用相同数据模型进行预填充的助手 iphone 应用程序(供我使用)。 然后获取填充的 .xcdatamodel 文件并在我的原始应用程序中使用它?

我希望这是有道理的:)

阿达姆

【问题讨论】:

    标签: iphone core-data


    【解决方案1】:

    我相信您要问的是您是否可以预先创建一个 CoreData 数据库并将其复制到 iPhone。对吗?

    This article 会有所帮助。这是一个报价:

    因此我建议以下五个步骤:

    1. 在逗号分隔的文件中创建数据,通常将每行数据(一个实体)放在文件的一行中,并用逗号分隔不同的列(其属性)。
    2. 编写一个独立程序并从您的主项目复制到您的 .xcdatamodel 文件中。
    3. 在新程序中编写代码,解析逗号分隔文件并将信息插入到 Core Data 持久存储中,该持久存储应与主项目中的持久存储相同。
    4. 在模拟器中运行程序
    5. 将数据从模拟器的文档目录复制到实际项目的包中。

    【讨论】:

    • 嗨本杰明我已经阅读了这个页面。我的问题是:我可以使用专门用于填充 CoreData 数据库的独立程序吗?在我输入数据后,我将填充的数据文件从文档目录复制到我的主包.. 改写:我可以替换 CVS 文件吗使用独立应用程序输入数据?
    • 当然。只需消除第 1 步。然后将第 3 步替换为允许您自己插入信息的屏幕,而不是为数据解析任何文件。 Core Data 文件是它的本质,只要你的 .xcodedatamodel 文件在项目之间是相同的,你就可以复制该文件,它就可以工作。
    【解决方案2】:

    有可能,我做到了。我使用此处的代码制作了一个桌面应用程序来读取 CSV 文件:

    http://www.mac-developer-network.com/columns/coredata/may2009/

    我只需要更改 CSV 部分的工作方式,并更改模型。

    • 我将模型从模型构建器复制并粘贴到 iPhone 模型中。 (点击“网格”区域,全选,复制)
    • 然后我将桌面应用程序生成的 sqlite 数据库(在 Application Support 中,在此应用程序的文件夹中找到)放入资源文件夹中
    • 我编写了一些代码,在启动时使用applicationDidLaunch 方法将sqlite 复制到iPhone 上的文档文件夹中(如果它不存在的话)。将它放在资源文件夹中可能不好。即使您使用只读数据库,Core Data 也可能希望向其写入一些内容。虽然不确定..
    • 我在我的 Core Data 设置中使用了文档文件夹中的 sqlite 文件。

    桌面和 iPhone Core Data sqlite 文件的格式似乎完全相同。只要它们具有相同的数据模型,您就可以将一个 sqlite 文件传输到另一个应用程序(iPhone 到 iPhone)。在另一个应用程序中,我使用 NSXMLParser 创建 Core Data sqlite 文件,然后将其传输到另一个应用程序,两者都在 iPhone 上使用模拟器。

    【讨论】:

    • 谢谢你,nevan.. 这个解决方案对我来说有点复杂,因为我是新手,但你把概念说清楚了。
    【解决方案3】:

    是的,您的数据源可以是任何您想要的数据源。其他建议都不错。创建一个托管对象模型 (.xcdatamodel),该模型与您要在应用程序中使用的模型相同。从文件中读取数据,创建托管对象的新实例并从文件中填充它。然后保存,进入 iPhone 模拟器中的捆绑包并复制它。这具有完全符合您需要的格式以及所有有用的元数据的额外好处。复制您的对象模型和托管对象类,一切顺利。

    但请注意,如果您确实打算将其设为只读,并且在安装时使用它,它将安装在您完成的应用程序包中(在 Applications/{SIGNATURE}/Myapp.app 下)。如果您打算编辑此数据库或允许用户将其保存到其中,最好将其复制到您的用户数据库所在的 Applications/{SIGNATURE}/Documents 目录中。

    【讨论】:

      猜你喜欢
      • 2018-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-23
      • 1970-01-01
      • 2012-01-10
      • 2017-01-10
      相关资源
      最近更新 更多