【发布时间】:2014-09-12 14:11:51
【问题描述】:
我正在使用 Restkit 发布 A 类型的对象,响应应该是 B 类型的对象。
我设置了适当的响应和请求映射,但 RestKit 抱怨它得到了 B 类型的对象而不是 A。
既然这是我想要的行为,有没有办法告诉 RestKit 它没问题并继续为我映射它?
【问题讨论】:
标签: ios objective-c rest restkit
我正在使用 Restkit 发布 A 类型的对象,响应应该是 B 类型的对象。
我设置了适当的响应和请求映射,但 RestKit 抱怨它得到了 B 类型的对象而不是 A。
既然这是我想要的行为,有没有办法告诉 RestKit 它没问题并继续为我映射它?
【问题讨论】:
标签: ios objective-c rest restkit
你需要做一些额外的工作来告诉 RestKit POST 的源对象不应该用作目标对象。为此,您需要 nil 请求操作的 targetObject (这意味着首先明确获取操作,然后将其入队):
RKManagedObjectRequestOperation *operation = [objectManager appropriateObjectRequestOperationWithObject:objectToPost method:RKRequestMethodPOST path:@"XXX" parameters:anyParams];
operation.targetObject = nil;
operation.targetObjectID = nil;
[objectManager enqueueObjectRequestOperation:operation];
【讨论】:
targetObject 必须是根对象对吧?在我们的项目中,通常有一个包装“服务器响应”对象。
在 RKObjectManager 中,第 668 行,如果有条件,您可以将其注释掉:
if (RKDoesArrayOfResponseDescriptorsContainMappingForClass(self.responseDescriptors, [object class])) operation.targetObject = object;
仅供参考:确保在您的 postObject 调用中使用显式路径,否则 restkit 将获取它找到的第一个响应描述符。
Restkit 通常(没有注释掉这一行)只会使用 targetObject 而不是使用与为 postObject 发送的路径相关联的响应描述符。
【讨论】: