在 Restkit 执行映射操作之前删除 Core data 中的现有对象

Posted

技术标签:

【中文标题】在 Restkit 执行映射操作之前删除 Core data 中的现有对象【英文标题】:Delete existing objects in Core data before Restkit performs mapping operation 【发布时间】:2014-07-09 16:26:02 【问题描述】:

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

我的核心数据存储中有一些现有对象。在执行 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];
    

我怎样才能以不同的方式解决这个问题?

更新:

使用 fetch Request Blocks 是不可行的,因为在树状层次结构中有很多实体。

我的核心数据结构如下:

RootEntity
- identifier

EntityB
- root_identifier

EntityC
- b_identifier

EntityD
- c_identifier

api 调用的参数是 RootEntity 的标识符。 我得到了响应中的所有实体。可以很容易地为RootEntityEntityB 编写FetchRequest,因为它们具有用于存储RootEntity 标识符的属性。但是对于EntityCEntityD,与RootEntity 没有直接关系,这使得编写获取请求变得困难。

另外,我在关系中设置了级联删除。因此,当 rootEntity 被删除时,所有子实体都会被删除。我认为这种删除会比发出那些获取请求更便宜。

【问题讨论】:

【参考方案1】:

您应该改为使用fetch request block,它由 RestKit 在成功时执行(不是失败,请注意您的响应描述符,因为它们决定了成功是什么)并删除与 fetch 匹配但不是新的所有内容收到回复。

【讨论】:

请详细说明您的更新。结构如何使获取请求块成为问题? 已用所需的解释更新了问题!让我知道是否有帮助。谢谢

以上是关于在 Restkit 执行映射操作之前删除 Core data 中的现有对象的主要内容,如果未能解决你的问题,请参考以下文章

在 RestKit 映射它之前访问 JSON 响应

Restkit Core Data 映射崩溃应用程序

RestKit 到 Core Data 的映射和加载零对象。 RKManagedObjectLoader

RestKit Core Data 一对多映射

RestKit 0.2 映射 Core Data <--> JSON 与一对多关系

Restkit/Core Data 关系映射,实体到相同类型的实体(父/子)