RestKit 不喜欢为 POST 响应映射不同的对象

Posted

技术标签:

【中文标题】RestKit 不喜欢为 POST 响应映射不同的对象【英文标题】:RestKit doesn't like mapping a different object for a POST response 【发布时间】:2014-09-12 14:11:51 【问题描述】:

我正在使用 Restkit 发布 A 类型的对象,响应应该是 B 类型的对象。

我设置了适当的响应和请求映射,但 RestKit 抱怨它得到了 B 类型的对象而不是 A。

既然这是我想要的行为,有没有办法告诉 RestKit 它没问题并继续为我映射它?

【问题讨论】:

【参考方案1】:

你需要做一些额外的工作来告诉 RestKit POST 的源对象不应该用作目标对象。为此,您需要 nil 请求操作的 targetObject (这意味着首先明确获取操作,然后将其入队):

RKManagedObjectRequestOperation *operation = [objectManager appropriateObjectRequestOperationWithObject:objectToPost method:RKRequestMethodPOST path:@"XXX" parameters:anyParams];
operation.targetObject = nil;
operation.targetObjectID = nil;
[objectManager enqueueObjectRequestOperation:operation];

【讨论】:

RKManagedObjectRequestOperation 上似乎没有 targetObjectID,有问题吗? 在类内部定义(不公开)。它也应该被取消,因为 id 用于在后台上下文中查找目标对象。 当设置targetObject 必须是根对象对吧?在我们的项目中,通常有一个包装“服务器响应”对象。 @Rivera,这取决于您如何使用密钥路径,因为这可以深入响应数据。所以根对象就是你钻到的任何东西。【参考方案2】:

在 RKObjectManager 中,第 668 行,如果有条件,您可以将其注释掉:

if (RKDoesArrayOfResponseDescriptorsContainMappingForClass(self.responseDescriptors‌​, [object class])) operation.targetObject = object; 

仅供参考:确保在您的 postObject 调用中使用显式路径,否则 restkit 将获取它找到的第一个响应描述符。

Restkit 通常(没有注释掉这一行)只会使用 targetObject 而不是使用与为 postObject 发送的路径相关联的响应描述符。

【讨论】:

以上是关于RestKit 不喜欢为 POST 响应映射不同的对象的主要内容,如果未能解决你的问题,请参考以下文章

使用 RestKit 映射的 JSON Post 后 TableView 不刷新

POST 中的 Restkit url 映射

列表内列表的RestKit对象映射

没有映射的 RestKit HTTP 响应代码

restkit 映射嵌套数组为空(带有 json 响应的嵌套 restkit 请求)

RestKit POST 发送 JSON 不包含映射路径/类名