3

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

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

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

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

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

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

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


更新

我正在尝试遵循casademora 在下面的答案中提出的方法,但是这样做时,我的两个商店最终都会同步到 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。

4

1 回答 1

2

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

于 2012-12-28T17:05:04.053 回答