Core data 删除服务器端的更改
我使用RestKit从web服务器接收数据并将其存储在核心数据中 一切正常,对象映射也正常 但是现在我有一个问题。 我想将我的设备与来自web服务器的数据同步。 使用新对象或更新对象的方法是明确的,因为RestKit为我控制它。但如何删除核心数据中的对象?有一种方法可以使用Core data 删除服务器端的更改,core-data,restkit,sync,Core Data,Restkit,Sync,我使用RestKit从web服务器接收数据并将其存储在核心数据中 一切正常,对象映射也正常 但是现在我有一个问题。 我想将我的设备与来自web服务器的数据同步。 使用新对象或更新对象的方法是明确的,因为RestKit为我控制它。但如何删除核心数据中的对象?有一种方法可以使用DELETE方法。但是,如果服务器上的某些对象被删除,情况又会怎样呢 我想发出一个带有上次同步时间戳的GET请求,以接收所有数据更改(增量) 新对象(确定) 修改对象(确定) 删除的对象(如何删除?) 如何使用JSON负载
DELETE
方法。但是,如果服务器上的某些对象被删除,情况又会怎样呢
我想发出一个带有上次同步时间戳的GET请求,以接收所有数据更改(增量)
- 新对象(确定)
- 修改对象(确定)
- 删除的对象(如何删除?)
removed
属性
依我看,删除所有未出现在请求响应中的本地对象不是一个好的解决方案。所以我只添加了一个属性removed
(不是deleted
,因为它是由核心数据保留的),并且只显示Object[removed=FALSE]
在提取请求中,它将是:
removed == FALSE
解决方案2:我应该删除什么?
您可以在API中创建一个简单的页面,指示要在应用程序中删除的内容。例如:
[
{'type': 'post', 'id': 5},
{'type': 'comment', 'id': 10},
]
然后,您将通过
postID
或commentID
获取对象,并将其从存储中删除。随着列表的增加,您必须找到一种方法来向服务器确认删除操作。这对我很有效。我正在使用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);
}
}