我是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'返回了一个
我在这里做错了什么想法?
由于 基督教
答案 0 :(得分: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;
}];
确保你已经为回来的物品定义了你的地图,你应该很好。