iOS 应用内购买内容集成

标签 ios core-data in-app-purchase

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

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

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

我目前的想法是将这三个实体作为 SQLite 表进行分发,并将其导入到 Core Data 中。不过,我想知道是否有人可以提出一个我忽略的更好的选择。我不是在这里寻找代码(嗯,那太好了,但是......)。我还需要在一台设备上导出用户输入的数据以转移到另一台设备上[我希望通过 Airdrop 实现这一点,但这是一个不同的故事]。

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

最佳答案

使用 Core Data 生成的 SQLite 文件是一个合理的解决方案。您应该知道用于生成和读取数据的 SQLite pragma 应该是一致的,并且要知道不同的选项可以创建多个文件(所有这些文件都是必需的)。参见 Technical Q&A 1809有关默认编译指示的更多详细信息,以及 WWDC 2013 session “核心数据和 iCloud 的新功能”。特别要注意的是,不建议将 WAL 的默认日记模式用于将要移动的文件(日记模式 DELETE,旧方法可能更可取)。

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

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

  1. 下载您需要导入文件系统某处的文件。
  2. 使用下载文件的 URL 将新的 NSSQLiteStoreType 持久存储添加到 NSPersistentStoreCoordinator:

[coordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:configuration URL:downloadedStuffURL options:options error:&error]

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

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

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

好了。位于 downloadedStuffURL 的商店中的数据现在将被导入位于 applicationStoreURL 的商店中。 downloadedStuffURL 存储将从协调器中删除,并添加 applicationStoreURL 存储和导入的数据。

关于iOS 应用内购买内容集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25595741/

相关文章:

iphone - 反向地理编码和本地化

ios - 构建复杂 NSCompoundPredicate 的最佳方法是什么?

ios - 如何创建免费的应用内购买?

ios - 在带有 Ludei/Cocoon JS 的 IOS 设备上使用 WebGL 不接触 ThreeJS OrbitControls

android - Android和iOS App通用订阅

ios - Swift Firebase 查询最多需要一分钟

uitableview - ‘NSRangeException’: row (1) beyond bounds (1) for section (0)

ios - 从 Watch 应用程序调用父应用程序时如何使用文件加密?

ios - 应用内购买 : Crash when view disappear

android - Libgdx + Android 应用内购买