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 不刷新