RESTKit:重用 objectManager 来制作后续的 POST

Posted

技术标签:

【中文标题】RESTKit:重用 objectManager 来制作后续的 POST【英文标题】:RESTKit: Reusing objectManager to make subsequent `POST` 【发布时间】:2014-05-16 05:14:13 【问题描述】:

我正在使用以下代码进行 POST:

[self.objectManager postObject:invitation path:kPath parameters:nil success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) 
             failure:^(RKObjectRequestOperation *operation, NSError *error) 
            ];

第一次POSTs 很好;但是,当我尝试后续的POSTs 时,我收到以下错误:

 *** Assertion failure in -[RKObjectManager addRequestDescriptor:], /Users/User/Documents...../Code/Network/RKObjectManager.m:766
2014-05-15 22:07:43.103 App[68071:60b] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Cannot add request descriptor: An existing descriptor is already registered for the class 'Entity' and HTTP method'*'.'

如何检测是否已添加请求/响应 descriptor?重用descriptor 的正确做法是什么?为了避免崩溃,我还有什么需要清空或不做的吗?

【问题讨论】:

【参考方案1】:

问题不在于 POST,问题在于您重复运行映射配置(每次您想要 POST)。

映射必须是唯一的(确定性的),因此不允许多次运行。您可以每次都删除它们,但这很浪费,所以实际上您应该在创建对象管理器时只加载它们一次,然后不要再这样做了。通过这种方式,您可以获得最佳重用。

【讨论】:

谢谢。有没有办法检查对象是否已经有映射? 您不应该需要 - 如果您在启动时配置映射然后不更改它们,那么设计上应该是正确的 我并不总是发布相同的对象。这意味着我有不同的实体。因此,根据我需要发布的实体,我需要更改映射。有没有更好的方法来处理这个问题? 您将不同种类的对象发布到同一个端点?这不是一个很好的休息网络服务 同一个url,但是POST和PUT的映射不同。

以上是关于RESTKit:重用 objectManager 来制作后续的 POST的主要内容,如果未能解决你的问题,请参考以下文章

RestKit 核心数据集成

RestKit 超时被忽略

使用 RestKit 导致核心数据崩溃的多个 RKResponseDescriptor

Objective C + RESTKit:获取对象的问题

如何使用 RestKit 加载多个不相关的对象?

在 POST JSON RestKit 中检索 null