具有 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