3

RestKit v0.20.0-rc1 を使用して、CoreData マッピングを正常に作成し、バンドルされた JSON ファイルからオブジェクトをインポートして、データを複数のビルドで保持することができました。ただし、独自のエンティティを作成して保存すると、[RKManagedObjectStore defaultStore].mainQueueManagedObjectContext を使用するとエンティティは次のビルド時にすぐに消えますが、[RKManagedObjectStore defaultStore].persistentStoreManagedObjectContext を使用すると適切に持続します。

    UserAccount *userAccount = [NSEntityDescription insertNewObjectForEntityForName:entityName inManagedObjectContext:managedObjectContext];
    userAccount.userID = @(userID);
    [userAccount addContactMethodsObject:phone];
    NSError *error = nil;
    if(![managedObjectContext save:&error])
        NSLog(@"%@", error);

上記のコードでは、どちらの managedObjectContext を使用してもエラーなしで保存され、同じコンテキストからのフェッチはエンティティを適切に返します。しかし、後続のビルドでは、上記のコードがメイン スレッドで実行されていても、mainQueueManagedObjectContext を使用すると、フェッチは常に nil を返します。

足りないものはありますか?

4

1 に答える 1

9

mainQueueManagedObjectContext を使用して作成されたコンテキストで save: を使用すると、その変更はストアに保持されません。RKManagedObjectStore のドキュメントによると (太字の鉱山):

管理対象オブジェクトのコンテキスト階層は、メイン スレッドをディスク I/O から分離し、デッドロックを回避するように設計されています。プライマリ コンテキストは独自のプライベート キューを管理するため、メイン キュー コンテキストを保存してもオブジェクトは永続ストアに保存されません。オブジェクトをディスクに保存するには、プライマリ コンテキストも保存する必要があります。

変更を保持し、引き続き mainQueueManagedObject コンテキストを使用する場合は、使用してみてください

- (BOOL)saveToPersistentStore:(NSError **)error

これにより、変更がコンテキスト階層に反映されます。

RKManagedObjectStore の関連ドキュメントは、http://restkit.org/api/latest/Classes/RKManagedObjectStore.html#//api/name/persistentStoreManagedObjectContext にあります

レストキットの NSManagedObject カテゴリのドキュメントは、 http: //restkit.org/api/0.20.0-pre3/Categories/NSManagedObjectContext+RKAdditions.html にあります。

于 2013-03-26T22:36:53.943 に答える