3

RestKitを使用してWebサーバーからデータを受信し、CoreDataに保存しています。

すべてが正常に機能し、オブジェクトのマッピングも正常に機能します。

しかし今、私は質問/問題があります。デバイスをWebサーバーのデータと同期したい。RestKitが私に代わってそれを制御するので、新しいオブジェクトまたは更新されたオブジェクトを使用する方法は明らかです。しかし、Core Dataのオブジェクトを削除するにはどうすればよいですか?この方法を使用するDELETE方法があります。しかし、サーバー上で一部のオブジェクトが削除された場合はどうなりますか?

すべてのデータ変更(デルタ)を受信するために、最後の同期のタイムスタンプを使用してGETリクエストを作成したいと思います。

  • 新しいオブジェクト(OK)
  • 変更されたオブジェクト(OK)
  • 削除されたオブジェクト(どのように?)

サーバーからJSONペイロードを使用してCoreData内のオブジェクトを削除する方法。JSONのオブジェクトの削除属性が設定されている場合、保存を防ぐ可能性はありますか?このオブジェクトをCoreDataから削除する方法はありますか?

4

2 に答える 2

3

それは私にとってはうまくいきます。RestKit0.10.2を使用しています

#pragma Mark - RKObjectLoaderDelegate
- (void)objectLoader:(RKObjectLoader *)objectLoader didLoadObjects:(NSArray *)objects {

    //Select all users in Core Data
    NSArray* allUsers = [User findAll]; 

    for (User *userRecord in allUsers) { 

        // check each user into objects loaded now. If not contains, delete him
        if (NO == [objects containsObject:userRecord]) {

                [[[[RKObjectManager sharedManager] objectStore] managedObjectContextForCurrentThread] deleteObject:userRecord];
        }
     } 

     //Saving changes in MOC
     NSError* error = nil; 
     [[[[RKObjectManager sharedManager] objectStore] managedObjectContextForCurrentThread] save:&error]; 

     if (nil != error) { 
        NSLog(@"################# Error %@", error);
     }

}
于 2012-09-25T17:26:46.403 に答える
0

解決策n°1:removed属性

リクエスト応答に表示されないすべてのローカルオブジェクトを削除するのは良い解決策ではありません。したがって、属性を追加してremoveddeletedCore Dataによって予約されているためではなく)、表示するだけObject[removed=FALSE]です。

フェッチリクエストでは、次のようになります。

removed == FALSE

解決策n°2:何を削除する必要がありますか?

APIで、アプリケーションで何を削除するかを示す簡単なページを作成できます。例えば:

[
  {'type': 'post', 'id': 5},
  {'type': 'comment', 'id': 10},
]

postID次に、またはによってオブジェクトをフェッチcommentIDし、ストアから削除します。リストが大きくなるにつれて、サーバーへの削除を確認する方法を見つける必要があります。

于 2012-09-04T21:02:43.307 に答える