POST 请求后删除 CoreData 对象

Posted

技术标签:

【中文标题】POST 请求后删除 CoreData 对象【英文标题】:Delete CoreData objects after POST request 【发布时间】:2013-09-06 10:18:34 【问题描述】:

我正在使用带有 CoreData 的 RestKit 0.20.3 来缓存我的 Web 服务的结果。 我需要从 CoreData 中删除所有不在响应中的对象,所以我使用[RKObjectManager addFetchRequestBlock]。当我执行 GET 请求时一切正常,但是当我执行 POST 请求时,CoreData 中的对象不会被删除,我认为是因为 deleteLocalObjectsMissingFromMappingResult 仅适用于 GET 请求。

我知道,在 RESTfull 架构中,POST 请求用于更新服务器端的实体,但在我的例子中,Web 服务提供搜索功能并在 POST 中采用许多可选参数。

有没有办法配置 RestKit 以在 POST 请求之后执行删除?

如果不需要,我需要在每个请求结束时手动执行删除还是有其他更好的方法?

【问题讨论】:

你调试看到deleteLocalObjectsMissingFromMappingResult没有被调用?我希望它应该被调用,因为它是映射操作的一部分。 deleteLocalObjectsMissingFromMappingResult 的主体包含以下代码,如果非 GET 请求if (! [[self.HTTPRequestOperation.request.HTTPMethod uppercaseString] isEqualToString:@"GET"]) RKLogDebug(@"Skipping deletion of orphaned objects: only performed for GET requests."); return YES; 最干净的选择是自己删除。 【参考方案1】:

目前不支持此功能。这里最好的选择是将RKRequestMethod 属性添加到RKManagedObjectRequestOperation,以指定允许用于托管对象清理的HTTP 方法。这将是一个简单的更改。

请在 RestKit Github 上打开一个请求该功能的问题,我们会看到将其包含在 0.21.0 中。

【讨论】:

2 年后,但您还记得为什么将其限制为仅GETs 吗?

以上是关于POST 请求后删除 CoreData 对象的主要内容,如果未能解决你的问题,请参考以下文章

带有 CORS 和 IE9 的 ASP Web API POST 请求(XDomainRequest 对象)

CORS:在成功的 OPTIONS 请求后,Firefox 不发送 POST 请求......适用于 Chrome 和 IE

斜角 | CustomPOST:我无法发出 CORS POST 请求,正文中有 json 数据对象

CORS 正在阻止 PUT、DELETE 和 POST 请求,但 GET 正在工作

如何让我的 C# API 响应来自我的 React 应用程序的 POST 请求? (CORS问题)

RestKit 对象映射 POST 响应,“CoreData:错误:在 NSManagedObject 类映射操作上调用指定初始化程序失败”