Ios 在Restkit执行映射操作之前,删除核心数据中的现有对象

Ios 在Restkit执行映射操作之前,删除核心数据中的现有对象,ios,core-data,restkit,Ios,Core Data,Restkit,在这种情况下,我基本上是在处理孤立对象 我的核心数据存储中有一些现有对象。在执行API请求操作之前,我删除了该特定实体的所有对象。因此,当我从服务器获取新对象时,我的本地数据与从服务器接收的新数据对象同步 但也有一种情况,当我的API请求操作失败时。在这种情况下,我无法承受本地数据库中现有对象的丢失。因此,我考虑使用撤销操作 现在我尝试使用setWillMapDeserializedResponseBlock执行此操作。(此块在API操作成功后、restkit执行映射之前执行) 因此,在这个块中

在这种情况下,我基本上是在处理孤立对象

我的核心数据存储中有一些现有对象。在执行API请求操作之前,我删除了该特定实体的所有对象。因此,当我从服务器获取新对象时,我的本地数据与从服务器接收的新数据对象同步

但也有一种情况,当我的API请求操作失败时。在这种情况下,我无法承受本地数据库中现有对象的丢失。因此,我考虑使用撤销操作

现在我尝试使用
setWillMapDeserializedResponseBlock
执行此操作。(此块在API操作成功后、restkit执行映射之前执行)

因此,在这个块中,我执行实体中现有对象的删除

但映射完成后,服务器响应中缺少但本地存储中存在的对象仍然存在。(因此,从本地存储中删除现有对象不会影响存储)。在
setWillMapDeserializedResponseBlock
中显式调用
saveToPersistantStore
方法后,不会反映更改

这是
setWillMapDeserializedResponseBlock

    {
    // start undo grouping
    [[[NSManagedObjectContext MR_defaultContext] undoManager] beginUndoGrouping];
    [[[NSManagedObjectContext MR_defaultContext] undoManager] setActionName:@"undo deleting objects"];

    // perform deletion of objects
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"..."];
    [Entity MR_deleteAllMatchingPredicate:predicate];

    // end undo grouping
    [[[NSManagedObjectContext MR_defaultContext] undoManager] endUndoGrouping];
    }
我如何以不同的方式处理这个问题

更新:

RootEntity
- identifier

EntityB
- root_identifier

EntityC
- b_identifier

EntityD
- c_identifier
使用fetch请求块是不可行的,因为树状层次结构中有很多实体

我的核心数据结构如下:

RootEntity
- identifier

EntityB
- root_identifier

EntityC
- b_identifier

EntityD
- c_identifier
api调用的参数是RootEntity的标识符。 我得到响应中的所有实体。对于
RootEntity
EntityB
可以轻松编写FetchRequests,因为它们有一个用于存储
RootEntity
标识符的属性。但是对于
EntityC
EntityD
,与
RootEntity
没有直接关系,这使得编写获取请求变得困难


此外,我在关系中设置了级联删除。所以,当rootEntity被删除时,所有子项都被删除。我认为这种删除比发出那些获取请求的成本要低。

您应该使用一个在成功时由RestKit执行的脚本(不是失败,请小心您的响应描述符,因为它们指示成功是什么)并删除与提取匹配但在刚收到的响应中不是新的所有内容。

请详细解释您的更新。结构如何使获取请求块成为问题?已使用所需的解释更新问题!如果有帮助,请告诉我。谢谢