iOS InApp购买内容集成

时间:2014-08-31 19:56:42

标签: ios core-data in-app-purchase

我有一个核心数据模型,其中五个具有各种关系。大多数情况下,这些数据是由用户在设备上创建的(实体包括诸如jpeg和描述性文本之类的东西),并且位于sqlite持久性存储中。

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

下载购买的内容后,我需要能够将其集成到我的核心数据存储中。所以,我试图了解最佳(或至少是一种好的")方式。

我目前的想法是将三个实体分配为SQLite表并将其导入Core Data。不过,我想知道,如果有人可以建议一个更好的选择,我可以忽视。我不在这里寻找代码(好吧,那会很棒,但是......)。我还需要将用户输入的数据导出到一个设备上以移动到另一个设备[我希望与Airdrop一起使用,但那是一个不同的故事]。

任何建议都会受到高度赞赏,即使有点不合时宜。

1 个答案:

答案 0 :(得分:1)

使用Core Data生成的SQLite文件是一种合理的解决方案。您应该知道用于生成和读取数据的SQLite编译指示应该是一致的,并且要注意不同的选项可以创建多个文件(所有这些文件都是必需的)。有关默认编译指示的更多详细信息,请参阅Technical Q&A 1809,以及WWDC 2013会话" Core Data和iCloud"中的新功能。特别值得注意的是,对于要移动的文件,不推荐使用WAL的默认日记模式(日志模式DELETE,旧方式,可能更好)。

简而言之,应用程序将下载Core Data生成的SQLite文件,您将执行迁移以将这些文件导入到商店中。请注意,开箱即用的迁移管理器不会阻止重复,您需要实现自己的迁移过程(这可能是您可能想要的,因为它可能是相同的内容可以多次导入。)

这个过程的一个例子是......

  1. 下载您需要在文件系统上某处导入的文件。
  2. 将新的NSSQLiteStoreType持久性存储添加到NSPersistentStoreCoordinator,并使用下载文件的URL:
  3. [coordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:configuration URL:downloadedStuffURL options:options error:&error]

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

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

      store = [coordinator persistentStoreForURL:downloadedStuffURL];  sqlStore = [coordinator migratePersistentStore:store toURL:applicationStoreURL options:options withType:NSSQLiteStoreType error:& error];

    2. 你去吧。现在,位于downloadedStuffURL的商店中的数据将导入位于applicationStoreURL的商店。将从协调器中删除downloadedStuffURL存储,并将使用导入的数据添加applicationStoreURL存储。