RESTkit例外:在搜索的关键路径中找不到可映射的对象表示
问题描述:
我正面临一些问题。服务器收到请求但映射未正确处理。我不明白我做错了什么。RESTkit例外:在搜索的关键路径中找不到可映射的对象表示
登录:
2016-04-25 19:39:16.114 cifrosvit[1063:15363] I restkit:RKLog.m:49 RestKit logging initialized...
2016-04-25 19:39:16.413 cifrosvit[1063:15363] I restkit.network:RKObjectRequestOperation.m:150 GET 'http://cifrosvit.com/api/get_info/?info=banners'
2016-04-25 19:39:17.188 cifrosvit[1063:15505] I restkit.network:RKObjectRequestOperation.m:222 GET 'http://cifrosvit.com/api/get_info/?info=banners' (200 OK/7 objects) [request=0.7722s mapping=0.0021s total=0.8101s]
2016-04-25 19:41:17.508 cifrosvit[1063:15363] I restkit.network:RKObjectRequestOperation.m:150 GET 'http://cifrosvit.com/api/user.sign_up/?adr=terwtrwe&city=fwferwtw&email=yrurweqrqw%40rfewq.rewq&name=fsdfsdfdsa&password=12345&phone_mob=54323425342'
2016-04-25 19:41:18.040 cifrosvit[1063:16373] D restkit.object_mapping:RKMapperOperation.m:407 Executing mapping operation for representation: {
data = (
);
errors = (
);
success = true;
}
and targetObject: (null)
2016-04-25 19:41:18.040 cifrosvit[1063:16373] D restkit.object_mapping:RKMapperOperation.m:433 Finished performing object mapping. Results: (null)
2016-04-25 19:41:18.041 cifrosvit[1063:16374] E restkit.network:RKObjectRequestOperation.m:215 GET 'http://cifrosvit.com/api/user.sign_up/?adr=terwtrwe&city=fwferwtw&email=yrurweqrqw%40rfewq.rewq&name=fsdfsdfdsa&password=12345&phone_mob=54323425342' (200 OK/0 objects) [request=0.5320s mapping=0.0000s total=0.5345s]: Error Domain=org.restkit.RestKit.ErrorDomain Code=1001 "No response descriptors match the response loaded." UserInfo={NSLocalizedFailureReason=A 200 response was loaded from the URL 'http://cifrosvit.com/api/user.sign_up/?adr=terwtrwe&city=fwferwtw&email=yrurweqrqw%40rfewq.rewq&name=fsdfsdfdsa&password=12345&phone_mob=54323425342', which failed to match all (0) response descriptors:, NSErrorFailingURLStringKey=http://cifrosvit.com/api/user.sign_up/?adr=terwtrwe&city=fwferwtw&email=yrurweqrqw%40rfewq.rewq&name=fsdfsdfdsa&password=12345&phone_mob=54323425342, NSErrorFailingURLKey=http://cifrosvit.com/api/user.sign_up/?adr=terwtrwe&city=fwferwtw&email=yrurweqrqw%40rfewq.rewq&name=fsdfsdfdsa&password=12345&phone_mob=54323425342, NSUnderlyingError=0x7fa58a300000 {Error Domain=org.restkit.RestKit.ErrorDomain Code=1001 "No mappable object representations were found at the key paths searched." UserInfo={NSLocalizedDescription=No mappable object representations were found at the key paths searched., NSLocalizedFailureReason=The mapping operation was unable to find any nested object representations at the key paths searched:
The representation inputted to the mapper was found to contain nested object representations at the following key paths: data, errors, success
This likely indicates that you have misconfigured the key paths for your mappings., keyPath=null, DetailedErrors=(
)}}, keyPath=null, NSLocalizedDescription=No response descriptors match the response loaded.}
代码:
RKObjectMapping* objectMapping = [RKObjectMapping mappingForClass:[ResponseModel class]];
[objectMapping addAttributeMappingsFromArray:@[@"success", @"errors"]];
[objectMapping addPropertyMapping:[RKRelationshipMapping
relationshipMappingFromKeyPath:@"data"
toKeyPath:@"data"
withMapping:[RKObjectMapping mappingForClass:[NSArray class]]]
];
RKResponseDescriptor* responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:objectMapping
method:RKRequestMethodPOST
pathPattern:@"user.sign_up/"
keyPath:nil
statusCodes:[NSIndexSet indexSetWithIndex:200]];
AFHTTPClient *client = [[AFHTTPClient alloc] initWithBaseURL:[NSURL URLWithString:@"http://cifrosvit.com/api/"]];
RKObjectManager *objectManager = [[RKObjectManager alloc] initWithHTTPClient:client];
[objectManager addResponseDescriptor:responseDescriptor];
RKLogConfigureByName("RestKit/ObjectMapping", RKLogLevelTrace);
[objectManager getObjectsAtPath:responseDescriptor.pathPattern parameters:params success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
NSLog(@"success");
} failure:^(RKObjectRequestOperation *operation, NSError *error) {
NSLog(@"failure");
}];
ResponseModel接口:
@interface ResponseModel : NSObject
@property NSString* success;
@property id data;
@property (strong, nonatomic) NSArray* errors;
@end
请求:
{
"success": "true",
"data": [],
"errors": []
}
为什么RESTKIT总是调用失败块?
答
可能你只需要改变这一行,因为它看起来像你设置一个无响应描述符?
[objectManager addResponseDescriptor:self.responseDescriptor];
所以删除self.
,因为它似乎你不设置实例变量,你只是有一个局部变量。
您还使用method:RKRequestMethodPOST
但制作与getObjectsAtPath
所以RestKit未能与POST
匹配GET
请求。
我发现这种情况是问题。我不明白为什么,但是当我从RKRequestMethodPOST更改请求方法到RKRequestMethodAny它开始工作。实际上这个请求的类型是POST。 – couldDog
好吧,好点,但它不是一个POST,它是一个GET,因为你正在使用'getObjectsAtPath' – Wain
你的答案是完全正确的。我错过了文档中的这个项目。谢谢。 – couldDog