3

現在、すべてのユーザーの iOS デバイスで同じデータを利用できるように、Core Data ストア全体を iCloud に同期しています。これはすべて、次のようにしてMagicalRecordを使用してセットアップされます。

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

ただし、デバイス固有のエンティティをデータベースに保存したいと考えています。これは基本的に、Web から取得した情報をキャッシュするために使用されますが、これがユーザーの iCloud アカウントのスペースを占有することは望ましくありません。

これを行うには2つの方法があると思います:

  1. データベースのどのテーブルを同期するかを選択し、デバイス固有のエンティティに使用されるテーブルを無視します。
  2. MagicalRecord で複数のデータベースを管理し、同期するエンティティを 1 つのデータベースに保存し、デバイス固有のエンティティを別のデータベースに保存します。

これら2つの方法のいずれかが可能かどうか、またはどちらが維持および/または実装が最も簡単かはわかりません。

これが可能かどうか、またどのように行うことができるかを知っている人はいますか? コード例をいただければ幸いです。


アップデート

以下の回答で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;
}

プロジェクトに 2 つのデータ モデルを追加しました。1 つはMyAppName_iCloud.xcdatamodeldという名前で、もう 1 つは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 に答える