1

我是 RestKit 的新手,所以这个问题可能很愚蠢:当使用 [objectManager sendObject:...] 时,我如何告诉 RestKit 它应该使用哪个映射来处理结果?更具体地说:我将 GET 和 POST 数据发送到服务器,该服务器返回 JSON 编码消息:

{"purchaseresult":{"status":"ok","errormsg":""}}

我使用的 Objective-C 代码如下所示:

RKObjectMapping *purchaseResultMapping = [RKObjectMapping mappingForClass:[PurchaseResult class]];
[purchaseResultMapping mapKeyPathsToAttributes:@"status", @"status", @"errormsg", @"errorMessage",nil];
[objectManager.mappingProvider setMapping:purchaseResultMapping forKeyPath:@"purchaseresult"];
[[RKObjectManager sharedManager].mappingProvider setErrorMapping:purchaseResultMapping];

[objectManager sendObject:queryParams toResourcePath:@"/purchase/post" usingBlock:^(RKObjectLoader* loader) {
    loader.method = RKRequestMethodPOST;
    loader.resourcePath = @"/purchase/post";
    loader.params = queryParams;
    loader.objectMapping = purchaseResultMapping;
}];

这会返回一个 RestKit 错误:

restkit.network:RKObjectLoader.m:216 在映射过程中遇到错误:预期为“__NSDictionaryI”类型的类的对象映射,提供者为“PurchaseResult”返回一个

有什么想法我在这里做错了吗?

谢谢克里斯蒂安

4

1 回答 1

1

您发送的对象是 NSDictionary,因此 RestKit 正在寻找 NSDictionary 的对象映射,但您提供的是 PurchaseResult 映射。如果您发送 PurchaseResult 的实例或为 NSDictionary 类提供映射,则应避免此错误。

替代方法如下:

[[RKObjectManager sharedManager] loadObjectsAtResourcePath:@"/purchase/post" usingBlock:^(RKObjectLoader *loader) {
  loader.delegate = **Your loader delegate here**;
  loader.method = RKRequestMethodPOST;
  loader.params = queryParams;
}];

只要确保您已经为返回的对象定义了映射,您应该会很好。

于 2012-11-23T16:05:49.813 回答