如何拥有多个应用程序 - 一个核心数据?

时间:2010-07-22 12:45:42

标签: iphone database macos core-data

我是一位经验丰富的开发人员,但对Mac来说是新手。我只是不想沿着一条路走下去,发现我后来犯了一些基本错误或错误的假设。

我想最终使用Core Data构建和销售iPhone应用程序。该应用程序将通过应用内购买免费提供内容。以下是我希望能够做到的事情:

选项1

  1. 构建一个指向相同Core Data对象模型的Mac OS X实用程序应用程序,但它有自己的“主”数据库。
  2. 使用Mac应用程序填充master数据库。
  3. 将主数据的子集从Mac应用程序导出到作为主数据子集的平面文件(XML?)。
  4. 当用户购买该数据时,请从云下载并将该数据导入本地iPhone数据存储。
  5. 2号应该很容易。我已经阅读过有关XML Parser的信息,它可以帮助我#4。我需要#1和3的帮助。

    对于#1,我无法弄清楚如何使用Xcode为两个应用程序维护一个对象模型。该数据模型必须接受模型版本控制。我是否只创建了两个项目,一台Mac和一台iPhone,并将它们指向同一个.xcdatamodel文件并且魔术适合我?

    对于#3,是否有人可以共享的示例代码将迭代一组对象来创建XML?

    选项2

    我正在考虑的另一个选项在下面讨论。而不是担心导入/导出,只需为每组新的或更新的数据创建单独的sql文件。

    我可以维护一个单独的“元数据”数据库,其中包含有关应用程序可用的各个sql文件的信息。

    然后,我可以从本地文档目录动态访问各个SQL文件。这类似于iBooks模型,其中sql文件等同于单独的书籍。

    我想我一次只能有两个活动数据库连接...一个用于元数据,另一个用于特定的“书”。但是,我不确定这是否会扩展到许多(数十或数百)个sql文件。

    感谢任何帮助!

    乔恩

    更新:我刚看到Marcus Zarra的回答:

    Removing and adding persistent stores to a core data application

    听起来选项2是一个坏主意。

3 个答案:

答案 0 :(得分:2)

对于(1),您可以在两个应用程序中使用相同的对象模型。实际上,如果您使用相同的Core Data生成的商店,则需要这样做。简而言之,在两个应用中包含相同的模型文件。在Xcode中,最简单的方法是将模型文件放在每个项目的项目文件夹的外部,然后添加模型文件而不将其复制到项目文件夹。这将确保两个应用程序为每个构建使用相同的模型文件。

对于(3),您需要首先使用与引用存储相同的模型创建“导出”持久性存储,并将其添加到引用上下文。在模型中,创建“导出”配置。为模型中的每个实体创建子实体,但不更改任何属性或关系。将这些实体分配给导出配置。

您需要为参考实体的每个ManagedObject子类添加“Clone”方法。触发时,该方法将返回一个填充了引用对象属性和关系的子实体(关系对象也将被克隆。)

请注意,克隆对象图是递归的,可以使用大量内存。

保存时,由于您已将其分配到“导出”配置,因此所有克隆的导出实体及其关系将保存到导出存储中。您不仅会克隆对象,还会克隆相关的对象图。

在iPhone应用程序中包含模型和导出存储。编写应用程序以仅使用导出实体。它永远不会注意到没有任何参考对象。

对于(4),我根本不会使用XML或根据核心数据导出数据。我只想使用在(3)中创建的导出Core Data SQL存储库并完成它。

答案 1 :(得分:0)

您可以提供NSManagedObjectContext实例和NSPersistentStoreCoordinator实例。此类具有允许您为sotring数据和格式(SQLite,Binary或XML)指定文件位置的选项

答案 2 :(得分:0)

您打算如何实际将数据从Mac传输到iPhone?这是你在开发过程中做的事情,还是人们在日常使用中做的事情?如果是后者,您可能最好立即将解耦导出/导入到您的应用中。因此,Mac会将数据序列化为XML或JSON,将其推送到云中的某个位置(不确定本地网络/ bonjour传输是否更容易或有用,云更通用),iPhone将获取数据并将其反序列化为本地模式/库。您不应该计划使用Core Data处理SQL层。不同的平台可能使用不同的存储后端。

相关问题