在 iOS 的 RestKit 中执行 postObject 时忽略响应

Posted

技术标签:

【中文标题】在 iOS 的 RestKit 中执行 postObject 时忽略响应【英文标题】:Ignore response when doing a postObject in RestKit for iOS 【发布时间】:2011-10-26 00:49:01 【问题描述】:

我正在使用 RestKit 连接到我们的 WCF 数据服务。

由于响应映射问题,我在使用 RKObjectManager 的 postObject 函数添加实体时遇到问题。

添加实体时,WCF 数据服务返回 201 状态代码和新添加的实体(作为响应)。

是否可以忽略响应,只使用返回的状态码来检查添加是否成功?

波努

【问题讨论】:

【参考方案1】:

为什么要忽略从服务器返回的新添加的实体?映射该结果有助于使您的本地表示与服务器的表示保持同步。服务器可能已经覆盖了您的对象的某些字段,例如对象 ID,而您想要跟踪它。

如果您有映射错误,可能是因为对 POST 操作的响应返回的对象表示形式与 GET 返回的对象表示形式不同。 您是否尝试过使用:

- (RKObjectLoader*)postObject:(id<NSObject>)object mapResponseWith:(RKObjectMapping*)objectMapping delegate:(id<RKObjectLoaderDelegate>)delegate

而是为返回的数据指定更合适的映射?

【讨论】:

【参考方案2】:

这里的问题可能是更改 REST 服务,因此一个简单的解决方案是在 postObject 调用某个资源路径的情况下忽略对 didFailWithError 的回调。

- (void)objectLoader:(RKObjectLoader *)objectLoader didFailWithError:(NSError *)error 
if ([objectLoader wasSentToResourcePath:@"/rest/api/returns/201" method:RKRequestMethodPOST] && [[objectLoader response] statusCode]==201) 
    NSLog(@"Object created");
 else 
    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Communication error"
                                                        message:[NSString stringWithFormat:@"Received status code %d: %@",                                                                                               objectLoader.response.statusCode,                                                                                               error.localizedDescription]                                                           delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
    [alertView show];

【讨论】:

【参考方案3】:

创建一个不关心响应中任何参数的普通 RKObjectMapping。

[RKObjectMapping mappingForClass: [NSNull class]];

【讨论】:

以上是关于在 iOS 的 RestKit 中执行 postObject 时忽略响应的主要内容,如果未能解决你的问题,请参考以下文章

Restkit:执行我自己的 RKMapperOperation 时创建了重复的对象

由于 json 问题,Restkit 在 iOS 8 中崩溃?

如何在 iOS 中使用 RestKit 2.X?

Restkit 集成到 iOS 项目中

iOS 7 中的 Restkit 兼容性

RestKit iOS 教程 - Xcode 无法识别 RestKit 类方法 - 缺少框架?