Json Restkit映射-没有响应描述符与加载的响应匹配
我是RestKit和Objective C的新手。我正在尝试使用RestKit从Web服务检索数据。我已经完成了映射,但是我得到了一个错误,它无法找到与响应匹配的结果。我使用不带KVC的映射,因为JSON格式没有键 下面是映射实现Json Restkit映射-没有响应描述符与加载的响应匹配,json,ios7,restkit,kvc,Json,Ios7,Restkit,Kvc,我是RestKit和Objective C的新手。我正在尝试使用RestKit从Web服务检索数据。我已经完成了映射,但是我得到了一个错误,它无法找到与响应匹配的结果。我使用不带KVC的映射,因为JSON格式没有键 下面是映射实现 +(RKObjectMapping *)venueMapping { RKObjectMapping *mapping = [RKObjectMapping mappingForClass:[venue class]]; NSDictionary
+(RKObjectMapping *)venueMapping {
RKObjectMapping *mapping = [RKObjectMapping mappingForClass:[venue class]];
NSDictionary *mappingDictionary = @{@"name":@"name"};
[mapping addAttributeMappingsFromDictionary:mappingDictionary];
return mapping;
}
我尝试只使用一个值来查看是否有匹配的值。下面是响应描述符
-(void) loadVenue:(void (^)(venue *))success failure:(void (^)(RKObjectRequestOperation *, NSError *))failure{
RKLogConfigureByName("RestKit/ObjectMapping", RKLogLevelTrace);
[self getObjectsAtPath:@"venue" parameters:nil success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult){
if(success){
venue *venues = (venue *)[mappingResult.array firstObject];
success(venues);
}
}failure:^(RKObjectRequestOperation *operation, NSError *error){
if(failure){
failure(operation,error);
}
}];
}
- (void) setupResponseDescriptors {
[super setupResponseDescriptiors];
RKResponseDescriptor *authenticatedUserResponseDescriptors = [RKResponseDescriptor responseDescriptorWithMapping:[MappingProvider venueMapping] method:RKRequestMethodGET pathPattern:@"venue" keyPath:@"" statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];
[self addResponseDescriptor:authenticatedUserResponseDescriptors];
}
我一直在阅读文档并尝试各种方法,但我仍然没有解决这个问题的方法。有人知道吗
附件是一个JSON返回示例
(
{
coverType = "<null>";
description = "";
name = "McDonald";
priv = 1;
rates = ();
},
{
coverType = "<null>";
description = "";
name = "My House";
priv = 1;
rates =();
},
)
添加TraceLog
2014-04-22 21:45:55.636 App_Test[420:60b] I restkit:RKLog.m:34 RestKit logging initialized...
2014-04-22 21:45:56.064 App_Test[420:60b] I restkit.network:RKObjectRequestOperation.m:180 GET 'http://api.kontakt.io/venue'
2014-04-22 21:46:46.327 App_Test[420:f03] D restkit.object_mapping:RKMapperOperation.m:377 Executing mapping operation for representation: (
{
beacons = (
);
beaconsCount = 0;
coverType = "<null>";
description = "";
id = "212321";
lat = "<null>";
lng = "<null>";
managers = (
);
name = McDonald;
priv = 1;
rates = (
);
users = (
);
}
)
and targetObject: (null)
2014-04-22 21:46:46.328 App_Test[420:f03] D restkit.object_mapping:RKMapperOperation.m:403 Finished performing object mapping. Results: (null)
2014-04-22 21:46:46.328 App_Test[420:570b] E restkit.network:RKObjectRequestOperation.m:243 GET 'http://api.kontakt.io/venue' (200 OK / 0 objects) [request=0.9645s mapping=0.0000s total=50.3422s]: Error Domain=org.restkit.RestKit.ErrorDomain Code=1001 "No response descriptors match the response loaded." UserInfo=0x9556ab0 {NSErrorFailingURLStringKey=http://api.kontakt.io/venue, NSLocalizedFailureReason=A 200 response was loaded from the URL 'http://api.kontakt.io/venue', which failed to match all (0) response descriptors:, NSLocalizedDescription=No response descriptors match the response loaded., keyPath=null, NSErrorFailingURLKey=http://api.kontakt.io/venue, NSUnderlyingError=0x9557c30 "No mappable object representations were found at the key paths searched."}
您正在尝试在path venue获取对象,但没有任何迹象表明您的JSON中有一个venue对象。您正在尝试在path venue获取对象,但没有任何迹象表明您的JSON中有一个venue对象。错误消息显示: 无法匹配所有0个响应描述符
这表明由于消息中的0,没有调用setupResponseDescriptors方法,因此没有向对象管理器添加响应描述符。错误消息显示: 无法匹配所有0个响应描述符
这表示由于消息中的0,未调用setupResponseDescriptors方法,因此未向对象管理器添加响应描述符。如果未使用CoreData,请确保在POD文件中定义Restkit,如下所示 pod“RestKit/Network”,“~>0.23” pod“RestKit/ObjectMapping”,“~>0.23”
如果您没有使用CoreData,请确保在POD文件中定义了Restkit,如下所示 pod“RestKit/Network”,“~>0.23” pod“RestKit/ObjectMapping”,“~>0.23”
不确定我是否正确阅读了这篇文章,但根据文档,许多web API返回的JSON没有任何可用于映射选择的嵌套属性。在这些情况下,您仍然可以使用RestKit,只需依赖URL匹配即可。这就是我使用文档中提到的路径模式的原因。我不确定我是否正确阅读了这篇文章,但根据文档,许多web API返回JSON时没有任何可用于映射选择的嵌套属性。在这些情况下,您仍然可以使用RestKit,只需依赖URL匹配即可。这就是我使用docsI中提到的路径模式的原因。我试图将整个映射放在代码中,以防由于数据不足而无法正确映射。但它似乎仍然不起作用。但是,我在调试期间发现了这个错误,NSUnderlyingError:Summary字符串解析错误。这是否意味着我的映射声明存在一些问题?进一步调试后,baseURL似乎不匹配。不太清楚发生了什么。将尝试进一步调试能否为响应添加跟踪日志输出?并将响应描述符密钥路径更改为nil。@Wain我添加了tracelog输出,还将响应描述符密钥路径更改为nil。仍然没有接近解决方案基于该日志,似乎从未调用setupResponseDescriptors…我尝试将整个映射放入代码中,以防由于数据不足而无法正确映射。但它似乎仍然不起作用。但是,我在调试期间发现了这个错误,NSUnderlyingError:Summary字符串解析错误。这是否意味着我的映射声明存在一些问题?进一步调试后,baseURL似乎不匹配。不太清楚发生了什么。将尝试进一步调试能否为响应添加跟踪日志输出?并将响应描述符密钥路径更改为nil。@Wain我添加了tracelog输出,还将响应描述符密钥路径更改为nil。仍然没有接近解决方案基于该日志,似乎从未调用setupResponseDescriptors…谢谢@Wain!我认为可能是映射定义错误或其他原因,但显然由于命名不匹配,objectManager中没有调用它。我真傻。谢谢你@Wain!我认为可能是映射定义错误或其他原因,但显然由于命名不匹配,objectManager中没有调用它。我真傻。