如何在restkit映射后和保存到实体之前清除旧实体?

Posted

技术标签:

【中文标题】如何在restkit映射后和保存到实体之前清除旧实体?【英文标题】:how to clear old entity after restkit mapping and before save to entity? 【发布时间】:2014-04-20 09:03:39 【问题描述】:

在restkit中,在某些情况下,我想在刷新之前清除实体。我使用跟随的代码,它可以工作。

[self clearcache]; //clear the entity
[manager getObjectsAtPath:self.path parameters:self.parameters success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) 
    [self finishedLoadingWithItems:[mappingResult array]];
 failure:^(RKObjectRequestOperation *operation, NSError *error) 
];

但现在我只想在映射完成后但在将新项目保存到实体之前清除缓存。 我尝试在后续功能中使用 clearcache,但不幸的是这也会清除新项目。

[self finishedLoadingWithItems:[mappingResult array]];

【问题讨论】:

【参考方案1】:

最后,我写了一个addFetchRequestBlockOnce的方法,它和addFetchRequestBlock差不多,但是在执行的时候会被移除。

[manager addFetchRequestBlockOnce:^NSFetchRequest *(NSURL *URL) 
];

【讨论】:

【参考方案2】:

这取决于您想要执行清除的时间(在所有请求之后?)。

通常,您希望使用 RestKit 的 fetch request block 功能(添加到 object manager),您可以在其中指定要执行的获取请求,该请求返回应清除的对象。 RestKit 将运行它并在映射期间删除生成的对象。

【讨论】:

似乎获取请求块只能添加不能删除,因此我需要使用一个附加标志,以便在我希望块清除实体时设置标志。是否有任何实例方法可以将获取请求块添加为仅执行一次? 我写了一个方法addFetchRequestBlockOnce,我觉得这是一个很好的API。 (但我的版本只是一种解决方法) 通常你会在获取请求上使用谓词。否则,您可以编辑对象管理器,以便您可以删除块或使用不同的对象管理器实例。考虑对您的更改提出拉取请求,或在 github 上提出问题以讨论修改。

以上是关于如何在restkit映射后和保存到实体之前清除旧实体?的主要内容,如果未能解决你的问题,请参考以下文章

RestKit 对象映射 - 一个实体,两个映射

RestKit 实体映射

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

Restkit:将请求中的字段包含到对象映射中

如何使用 RestKit 指定关系?

RestKit - 到同一实体的关系映射创建无限循环