RKObjectManager 用于 PUT 的正确用法是啥?

Posted

技术标签:

【中文标题】RKObjectManager 用于 PUT 的正确用法是啥?【英文标题】:What's the correct use of RKObjectManager for PUT?RKObjectManager 用于 PUT 的正确用法是什么? 【发布时间】:2013-05-04 00:46:51 【问题描述】:

我正在使用一个 API,它允许使用 PUT 请求更新对象 - 具有以下格式(带 curl):

curl --request PUT -u <api_key>: <api_url> \
-d "attribute=newvalue"

即然后更新 curl 中列出的关联对象(在 API url 中引用)的任何属性,并返回更新后的对象。

我将 RestKit 与映射对象一起使用,一切都与 GET 一起工作。但是在映射对象中更新属性后,我很难让 RKObjectManager 中的 putObject 方法工作,例如:

 [objectManager putObject:<someObject>
               path:path
               parameters:nil
               success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) 
               failure:^(RKObjectRequestOperation *operation, NSError *error) 
                [self.refreshControl endRefreshing];
               
 ];

无论我作为第一个参数输入什么 - 一个更新的映射对象、一个 JSON 化字典,甚至只是一个普通的旧正文字符串,似乎都会从 RestKit 返回“无法解析请求数据,无效 JSON”错误。我做错了什么?

【问题讨论】:

【参考方案1】:

您的&lt;someObject&gt; 应该是您的数据模型中的一个类的实例。该类必须具有一组已定义的映射。

假设你有一个课程Person。您定义一个映射和一个响应描述符,以便 RestKit 可以将下载的 JSON 转换为 Person 对象。现在,您需要获取 inverseMapping 来定义您的请求描述符,以便 RestKit 知道如何序列化以进行上传。

这允许 RestKit 获取您的 &lt;someObject&gt;,将其序列化为 JSON(请求描述符),将其发送到您的服务器,然后接收响应并将该数据映射回更新的对象(响应描述符)。

查看示例here。它使用字典来保存更新的属性,但原理是一样的。使用字典可以更轻松地上传部分对象而不是完整对象。

【讨论】:

以上是关于RKObjectManager 用于 PUT 的正确用法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

使用 RestKit 和 RKObjectManager 时如何添加一些默认参数?

RestKit:更改 RKObjectManager 的基本 URL

使用 RestKit 时从 RKObjectManager 继承

未找到 iOS“RKObjectManager.h”

在“RKObjectManager”类型的对象上找不到属性“managedObjectStore”

维护 RKObjectManager/AFHTTPClient 请求排序