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

时间:2012-12-28 12:41:10

标签: iphone ios ipad core-data magicalrecord

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

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

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

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

  1. 选择应同步数据库的哪些表,并忽略用于设备特定实体的表。
  2. 让MagicalRecord管理多个数据库并存储应在一个数据库中同步的实体和另一个数据库中特定的设备。
  3. 我不知道这两种方式中的任何一种是否可行,或者哪种方式最易于维护和/或实施。

    有谁知道这是否可行以及如何做到这一点?我们非常感谢代码示例。


    更新

    我正在尝试遵循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。

1 个答案:

答案 0 :(得分:2)

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