iOS InApp购买内容集成

iOS InApp购买内容集成,ios,core-data,in-app-purchase,Ios,Core Data,In App Purchase,我有一个核心数据模型,其中有五个具有各种关系。大多数情况下,这些数据是由用户在设备上创建的(实体包括JPEG和描述性文本等内容),并保存在sqlite持久存储中 然而,我还想提供应用内购买,每一个都将包含五个实体中三个实体的数据。其他两个实体仅与用户在设备上创建的核心数据对象相关,因此不会成为应用内购买的一部分。任何一次下载的数据量都很小(100-300K) 下载购买的内容后,我需要能够将其集成到我的核心数据存储中。所以,我正在努力理解最好的(或者至少是“好的”)方法 我目前的想法是将这三个实体

我有一个核心数据模型,其中有五个具有各种关系。大多数情况下,这些数据是由用户在设备上创建的(实体包括JPEG和描述性文本等内容),并保存在sqlite持久存储中

然而,我还想提供应用内购买,每一个都将包含五个实体中三个实体的数据。其他两个实体仅与用户在设备上创建的核心数据对象相关,因此不会成为应用内购买的一部分。任何一次下载的数据量都很小(100-300K)

下载购买的内容后,我需要能够将其集成到我的核心数据存储中。所以,我正在努力理解最好的(或者至少是“好的”)方法

我目前的想法是将这三个实体作为SQLite表分发,并将它们导入核心数据。不过,我想知道是否有人能提出一个我忽略的更好的选择。我不是在这里寻找代码(好吧,那太好了,但是…)。我还需要在一台设备上导出用户输入的数据,以便移动到另一台设备上(我希望使用Airdrop实现这一点,但情况不同)


任何建议都将不胜感激,即使有点离谱。

使用核心数据生成的SQLite文件是一个合理的解决方案。您应该注意,用于生成和读取数据的SQLite杂注应该是一致的,并且注意不同的选项可以创建多个文件(所有这些文件都是必需的)。有关默认pragmas以及WWDC 2013课程“核心数据和iCloud中的新功能”的更多详细信息,请参阅。特别值得注意的是,对于将要移动的文件,不建议使用WAL的默认日志记录模式(日志模式删除,旧方法可能更可取)

简而言之,应用程序将下载核心数据生成的SQLite文件,您将执行迁移以将这些文件导入存储。请注意,开箱即用的迁移管理器不会防止重复,您需要实现自己的迁移过程才能做到这一点(您很可能希望这样做,因为可能会多次导入相同的内容)

这个过程的一个例子是

  • 下载文件系统中需要导入的文件
  • 向NSPersistentStoreCoordinator添加新的NSSQLiteStoreType持久存储,URL指向下载的文件:
  • [协调器addPersistentStoreWithType:NSSQLiteStoreType配置:配置URL:downloadedStuffURL选项:选项错误:&错误]

    请注意,我还建议将
    NSReadOnlyPersistentStoreOption
    作为选项的一部分,这样就不会尝试写入这些文件

  • 使用主应用程序数据存储URL作为目标执行迁移:

    store=[coordinator persistentStoreForURL:downloadedStuffURL]; sqlStore=[coordinator migratePersistentStore:store toURL:applicationStoreURL选项:类型为NSSQLiteStoreType的选项错误:&错误]


  • 就这样。位于downloadedStuffURL的存储中的数据现在将导入位于applicationStoreURL的存储中。下载的StuffURL存储将从coordinator中删除,而applicationStoreURL存储将添加导入的数据。

    Geez,这听起来很简单!除了最基本的迁移之外,我还没有做过任何事情,所以我显然必须对它做一些阅读。感谢您花时间提供如此周到的答复。