我正在使用RestKit连接到我们的WCF数据服务。
由于响应映射问题,我在使用RKObjectManager的postObject函数添加实体时遇到问题。
添加实体后,WCF数据服务会返回201状态代码和新添加的实体(作为响应)。
是否可以忽略响应并仅使用返回的状态代码来检查添加是否成功?
Ponnu
答案 0 :(得分:1)
为什么要忽略从服务器返回的新添加的实体?映射结果对于使本地表示与服务器的表示保持同步非常有用。服务器可能已经覆盖了对象的某些字段,如对象ID,并且您希望跟踪它。
如果您有映射错误,可能是因为对POST操作的响应返回了对象的表示形式,该表示形式与使用GET返回的对象不同。 你尝试过使用过:
- (RKObjectLoader*)postObject:(id<NSObject>)object mapResponseWith:(RKObjectMapping*)objectMapping delegate:(id<RKObjectLoaderDelegate>)delegate
而是为返回的数据指定更合适的映射?
答案 1 :(得分:0)
这里的问题可能是改变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];
}
答案 2 :(得分:0)
创建一个简单的RKObjectMapping,它不关心响应中的任何参数。
[RKObjectMapping mappingForClass: [NSNull class]];