2

私はIOSプログラミングに不慣れで、現在コアデータを学習しています。コアデータに特定のオブジェクトのみを保存する必要があるコードを実行しました。では、どうすればそれができますか?

シナリオによると、サーバーからのデータとローカルストレージ(コアデータ)がありますが、ユーザーがアプリを閉じるときに(バックグラウンドに移動)、サーバー(ネットが利用可能な場合)にデータを保存したいのですが、そうでない場合はローカルストレージ(ただし、選択された場合のみ-特定のデータを保存する必要があることを意味します。ローカルに保存したくないオンラインサーバーからのオブジェクトがあります)。

可能であれば解決策を教えてください。

よろしくニサールアーメド

4

2 に答える 2

1

これを達成するための2つの方法があります。

  1. 挿入および更新されたオブジェクトを繰り返し処理し、保存したくないオブジェクトを元に戻します。挿入されたオブジェクトは削除する必要があり、更新する必要があります。

    for (NSManagedObject* obj in [self.managedObjectContext insertedObjects]) {
        if (/*Shouldn't be saved*/) {
            [self.managedObjectContext deleteObject:obj];
        }
    }
    
    for (NSManagedObject* obj in [self.managedObjectContext updatedObjects]) {
        if (/*Shouldn't be saved*/) {
            [self.managedObjectContext refreshObject:obj mergeChanges:NO];
        }
    }
    
  2. 個別の管理対象オブジェクトコンテキストを作成します。保存するオブジェクトを新しいコンテキストで再作成してから保存します。

    NSManagedObjectContext* newContext = [[NSManagedObjectContext alloc] init];
    [newContext setPersistentStoreCoordinator:[self.managedObjectContext persistentStoreCoordinator]];
    for (NSManagedObject* obj in objectsWantToSave) {
        NSEntityDescription* entity = [obj entity];
        NSDictionary* valuesByKeys = [obj dictionaryWithValuesForKeys:[[entity attributesByName] allKeys]];
        NSManagedObject* objCopy = [NSEntityDescription insertNewObjectForEntityForName:[entity name] inManagedObjectContext:newContext];
        [objCopy setValuesForKeysWithDictionary:valuesByKeys];
    }
    [newContext save:NULL];
    

私の意見では、2番目のアプローチの方が適しています。

于 2013-02-18T12:49:42.460 に答える
0

UIManagedDocumentをご覧ください-http ://developer.apple.com/library/ios/#documentation/uikit/reference/UIManagedDocument_Class/Reference/Reference.html

コアデータの使用に関連する多くの定型文を処理します。

于 2013-02-18T12:48:52.800 に答える