6

私はコアデータを扱っているiPadアプリに取り組んでいます。

アプリが管理するデータは、2 つのカテゴリに分類できます。

  • 最初の種類のデータは、そのデバイスのみまたはアプリのみに固有です。
  • 一方、他のカテゴリのデータは、同じアプリを持つさまざまなデバイス間で同期する必要があります。

そのため、シナリオでは、プロジェクトに 2 つのモデル ファイルと、対応する 2 つの sqlite ファイルがあると考えました。そして、同期を達成するために1つのsqliteファイルを同期します。

私のアプローチが正しく実行可能かどうかを提案してください。そうでない場合は、他の解決策を提案してください。

質問を理解しようとしてください。ここでは、互いに異なる構造を持つ 2 つの sqlite ファイルについて話しています。「.xcdatamodel」モデル ファイルを意味します

4

2 に答える 2

18

ここで重複する可能性があります。

それぞれに異なる管理対象オブジェクト コンテキストを作成し、それらを適切に管理すれば、任意の数のデータ モデルを使用できます。

- (NSURL *)applicationDocumentsDirectoryForCoreData
{
    return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
}

//最初のデータモデル

NSURL *modelURL1 = [[NSBundle mainBundle] URLForResource:@"1_model" withExtension:@"momd"];
NSURL *storeURL1 = [[self applicationDocumentsDirectoryForCoreData] URLByAppendingPathComponent:@"1_model.sqlite"];
NSError *error = nil;
NSManagedObjectModel *managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL1];
persistentStoreCoordinator1 = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel: managedObjectModel];

if (![persistentStoreCoordinator1 addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL1 options:nil error:&error])
    {
        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        abort();
    }

//2 番目のモデル。

 NSURL *modelURL2 = [[NSBundle mainBundle] URLForResource:@"2_model" withExtension:@"momd"];
 NSURL *storeURL2 = [[self applicationDocumentsDirectoryForCoreData] URLByAppendingPathComponent:@"2_model.sqlite"];
 managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL2];
 NSError *error = nil;
 persistentStoreCoordinator2 = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:managedObjectModel];

 if (![persistentStoreCoordinator2 addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL2 options:nil error:&error])
    {
        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        abort();
    }

そして、あなたが望む店のMOCを取り出しながら:

//select your store - do that in selectStore or a function like that.
NSPersistentStoreCoordinator *coordinator = [self selectStore];
    if (coordinator != nil) {
        managedObjectContext = [[NSManagedObjectContext alloc] init];
        [managedObjectContext setPersistentStoreCoordinator:coordinator];
    }

2つの店舗からの選択。

-(NSPersistentStoreCoordinator *)selectStore
 {
    if(someCondtion? return persistentStoreCoordinator1: persistentStoreCoordinator2;
 }
于 2013-04-22T11:43:35.300 に答える
-3

plist を使用して、デバイス固有のものすべてのファイルとして保存する必要があります。これは、それほど頻繁に更新されていないと思われるためです。次に、1 行のコードでそれを辞書または配列に読み込むことができます。

あなたの質問に答えるために、はい、必要な数のコアデータファイルを作成できますが、維持するのが面倒になる可能性があります

于 2013-04-22T11:44:40.377 に答える