服务器端更改的 Restkit.Delete
Posted
技术标签:
【中文标题】服务器端更改的 Restkit.Delete【英文标题】:Restkit.Delete on server sided changes 【发布时间】:2012-09-04 20:53:23 【问题描述】:我使用 RestKit 从我的网络服务器接收数据并将其存储在 Core Data 中。
一切正常,对象映射也是如此。
但现在我有一个问题/问题。
我想将我的设备与来自网络服务器的数据同步。
新对象或更新对象的方式很清楚,因为 RestKit 为我控制它。但是如何删除 Core Data 中的对象呢?有一种使用DELETE
方法的方法。但是,如果某些对象在服务器上被删除了呢?
我想使用上次同步的时间戳发出 GET 请求,以接收所有数据更改(增量)。
新对象(正常) 修改对象(OK) 已删除对象(如何?)如何使用 JSON 负载从服务器中删除 Core Data 中的对象。 设置 JSON 中对象的删除属性时,是否有可能阻止保存?有没有办法从 Core Data 中删除这个对象。
【问题讨论】:
【参考方案1】:这对我有用。我正在使用 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);
【讨论】:
【参考方案2】:解决方案 n°1:removed
属性
恕我直言,删除所有未出现在请求响应中的本地对象并不是一个好的解决方案。所以我只添加一个属性removed
(不是deleted
,因为它是Core Data 保留的)并且只显示Object[removed=FALSE]
。
在获取请求中,它将是:
removed == FALSE
解决方案 n°2:我应该删除什么?
您可以在您的 API 中创建一个简单的页面来指示您的应用程序中要删除的内容。例如:
[
'type': 'post', 'id': 5,
'type': 'comment', 'id': 10,
]
然后,您将通过postID
或commentID
获取对象并将它们从存储中删除。您必须找到一种方法向服务器确认删除,因为列表会增加。
【讨论】:
以上是关于服务器端更改的 Restkit.Delete的主要内容,如果未能解决你的问题,请参考以下文章
如何更改 Apache Tomcat Web 服务器端口号 [关闭]