具有 MagicalRecord 的多个数据库或仅将部分数据库同步到 iCloud

Posted

技术标签:

【中文标题】具有 MagicalRecord 的多个数据库或仅将部分数据库同步到 iCloud【英文标题】:Multiple databases with MagicalRecord or sync only part of database to iCloud 【发布时间】:2012-12-28 12:41:10 【问题描述】:

我目前正在将我的整个 Core Data 存储同步到 iCloud,以便所有用户 ios 设备上都可以使用相同的数据。这一切都是使用MagicalRecord 设置的:

[MagicalRecord setupCoreDataStackWithiCloudContainer:@"xxxxxxx.com.mydomain.MyAppName" localStoreNamed:@"MyAppName"];

但是,我想在数据库中存储一些特定于设备的实体。它基本上用于缓存从网络检索到的信息,我不希望这占用用户 iCloud 帐户的空间。

我相信有两种方法可以做到这一点:

    选择应同步数据库的哪些表并忽略用于设备特定实体的表。 让 MagicalRecord 管理多个数据库并将应同步的实体存储在一个数据库中,并将特定设备存储在另一个数据库中。

我不知道这两种方法中的任何一种是否可行,或者哪种方法最易于维护和/或实施。

有谁知道这是否可行以及如何实现?一个代码示例将不胜感激。


更新

我正在尝试遵循casademora in the answer below 提出的方法,但是这样做时,我的两个商店最终都会同步到 iCloud。我在application:didFinishLaunchingWithOptions:中添加了以下内容

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

    [MagicalRecord setupCoreDataStackWithiCloudContainer:@"xxxxxxxxx.com.mydomain.MyAppName" localStoreNamed:@"MyAppName_iCloud"];
    [[NSPersistentStoreCoordinator coordinatorWithInMemoryStore] addSqliteStoreNamed:@"MyAppName" withOptions:nil];

    // Override point for customization after application launch.
    return YES;

我在项目中添加了两个数据模型。一个名为 MyAppName_iCloud.xcdatamodeld,一个名为 MyAppName.xcdatamodeld

我想避免 MyAppName 存储同步到 iCloud。

【问题讨论】:

有多少数据是特定于设备的?尝试同步一些数据而不是全部数据可能比它的价值更麻烦? 我已经考虑过了。设备特定数据是作为从 Web 服务下载的数据的“缓存”。当设备启动时,我想在从网络加载数据时显示此信息,以便用户在加载时使用应用程序不会受到阻碍。此外,这用于离线功能。这可能是很多信息,但可能还不错。老实说,我还没有对数据量的估计,这就是我寻求实施更理想解决方案的原因。但是,我最终可能只是同步所有这些。 【参考方案1】:

MagicalRecord 只是一组有用的帮助方法,它们使 CoreData 更易于处理。 MagicalRecord 不是 CoreData 的包装器或替代品。这是理解 CoreData 可以做什么,MagicalRecord 可以做什么的关键。因此,如果 CoreData 可以处理多个持久存储,MagicalRecord 也可以。唯一的诀窍是找到适合您需要的正确辅助方法。在这种情况下,该方法在 NSPersistentStoreCoordinator 中。看一下 -addSqliteStoreNamed: 方法。这将满足您的需求,而无需常规 addPersistentStore: 方法的所有额外参数(无论如何,它实际上是在幕后使用的)

【讨论】:

我很高兴在这里,这是可能的。我试图让这个工作,但由于某种原因,我的两个商店最终都被同步到了 iCloud。你介意看看我的方法,看看你是否知道出了什么问题?我已更新原始问题以显示我的代码。 理想情况下,类别本身具有在核心数据堆栈初始化过程中设置的实例变量,因此它不仅仅是方法。

以上是关于具有 MagicalRecord 的多个数据库或仅将部分数据库同步到 iCloud的主要内容,如果未能解决你的问题,请参考以下文章

无法在具有 MagicalRecord [核心数据] 的实体中分配给 ...

带有 MagicalRecord 和多个商店的 AFIncrementalStore

MagicalRecord:修改相关对象的属性

MagicalRecord 调用多个保存方法

带有primaryRelationshipKey的MagicalRecord

MagicalRecord 如何在关系中添加对象