3

我使用 RestKit 从我的 Web 服务器接收数据并将其存储在 Core Data 中。

一切正常,对象映射也是如此。

但现在我有一个问题/问题。我想将我的设备与来自网络服务器的数据同步。新对象或更新对象的方式很清楚,因为 RestKit 为我控制它。但是如何删除 Core Data 中的对象呢?有一种使用方法的DELETE方法。但是,如果某些对象在服务器上被删除,那又会怎样呢?

我想使用上次同步的时间戳发出 GET 请求,以接收所有数据更改(增量)。

  • 新对象(确定)
  • 修改对象(确定)
  • 删除的对象(如何?)

如何使用 JSON 有效负载从服务器中删除 Core Data 中的对象。设置 JSON 中对象的删除属性时,是否有可能阻止保存?有没有办法从核心数据中删除这个对象。

4

2 回答 2

3

这对我行得通。我正在使用 RestKit 0.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属性

恕我直言,删除请求响应中未出现的每个本地对象并不是一个好的解决方案。所以我只是添加了一个属性removed(不是deleted因为它是由 Core Data 保留的)并且只显示Object[removed=FALSE].

在获取请求中,它将是:

removed == FALSE

解决方案 n°2:我应该删除什么?

您可以在您的 API 中创建一个简单的页面来指示您的应用程序中要删除的内容。例如:

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

然后,您将通过postIDor获取对象commentID并将它们从存储中删除。您必须找到一种方法来确认删除到服务器,因为列表会增长。

于 2012-09-04T21:02:43.307 回答