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

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

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

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

【问题讨论】:

    标签: ios objective-c rest 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 发送的路径相关联的响应描述符。

    【讨论】:

      猜你喜欢
      • 2011-11-25
      • 1970-01-01
      • 1970-01-01
      • 2013-08-01
      • 1970-01-01
      • 2014-04-14
      • 2013-10-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多