thr*_*eez 7 ios restkit restkit-0.20
我在使用RestKit发布请求期间将响应映射回对象时遇到问题.
这是代码:
请求:
// mapping for the response. response is an object: {"response":"message","success":bool}
RKObjectMapping *responseMapping = [RKObjectMapping mappingForClass:[GenericResponse class]];
[responseMapping addAttributeMappingsFromArray:@[@"success",@"response"]];
responseMapping.setDefaultValueForMissingAttributes = YES;
RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:responseMapping pathPattern:@"/authenticate" keyPath:nil statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];
// mapping for the request body
RKObjectMapping *requestMapping = [RKObjectMapping requestMapping];
[requestMapping addAttributeMappingsFromArray:@[@"username", @"password"]];
RKRequestDescriptor *requestDescriptor = [RKRequestDescriptor requestDescriptorWithMapping:requestMapping objectClass:[LoginCriteria class] rootKeyPath:nil];
// set up the request
RKObjectManager *manager = [RKObjectManager managerWithBaseURL:[NSURL URLWithString:@"http://localhost:8080"]];
[manager addResponseDescriptor:responseDescriptor];
[manager addRequestDescriptor:requestDescriptor];
[manager setRequestSerializationMIMEType:@"application/json"];
// set up the LoginCriteria object
LoginCriteria* loginCriteria = [LoginCriteria new];
loginCriteria.password = @"test";
loginCriteria.username = @"test";
// make the request
[manager postObject:loginCriteria path:@"/authenticate" parameters:nil
success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
GenericResponse *genericResponse = (GenericResponse*)mappingResult;
NSLog(@"logged in: %@", [mappingResult array]);
} failure:^(RKObjectRequestOperation *operation, NSError *error) {
NSLog(@"login failed");
}];
Run Code Online (Sandbox Code Playgroud)
GenericResponse.h:
@interface GenericResponse : NSObject
@property (nonatomic) Boolean* success;
@property (nonatomic, copy) NSString* response;
@end
Run Code Online (Sandbox Code Playgroud)
日志:
2012-12-17 15:44:22.890 Radiuus[8221:1703] T restkit.network:RKHTTPRequestOperation.m:139 POST 'http://localhost:8080/authenticate':
request.headers={
Accept = "application/json";
"Accept-Language" = "en, fr, de, ja, nl, it, es, pt, pt-PT, da, fi, nb, sv, ko, zh-Hans, zh-Hant, ru, pl, tr, uk, ar, hr, cs, el, he, ro, sk, th, id, ms, en-GB, ca, hu, vi, en-us;q=0.8";
"Content-Type" = "application/json; charset=utf-8";
"User-Agent" = "Radiuus/1.0 (iPhone Simulator; iOS 6.0; Scale/1.00)";
}
request.body=(null)
2012-12-17 15:44:23.244 Radiuus[8221:5d0b] T restkit.network:RKHTTPRequestOperation.m:156 POST 'http://localhost:8080/authenticate' (200):
response.headers={
"Content-Type" = "application/json";
Date = "Mon, 17 Dec 2012 20:44:23 GMT";
Server = "Apache-Coyote/1.1";
"Transfer-Encoding" = Identity;
}
response.body={"response":"authentication succeeded","success":true}
2012-12-17 15:44:23.246 Radiuus[8221:4f03] W restkit.object_mapping:RKMapperOperation.m:76 Adding mapping error: Expected an object mapping for class of type 'LoginCriteria', provider returned one for 'GenericResponse'
Run Code Online (Sandbox Code Playgroud)
从日志中,对我来说很奇怪的是,似乎RestKit期望反序列化对LoginCriteria对象的响应,但是当它正确获取GenericResponse对象时"失败",这当然是正确的.
任何帮助是极大的赞赏!
感谢您对问题的回答,因为它引导我找到了如何使用RestKit内置方法之一来解决此问题而不是修改核心代码的正确方向.
从他的文档https://github.com/RestKit/RestKit/wiki/Object-mapping中,在Core Data Post/Put部分的处理多个根对象中,他提到如果你想发布一种类型的对象,但是收到另一个响应,那么你必须nil走出targetObject的请求操作.他的文档中缺少一个完整的示例,因此这里是我使用的代码块:
RKManagedObjectRequestOperation *operation = [RKObjectManager.sharedManager appropriateObjectRequestOperationWithObject: objectToBePOSTed method:RKRequestMethodPOST path: path parameters: params];
operation.targetObject = nil;
[operation setCompletionBlockWithSuccess:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
//handle success
} failure:^(RKObjectRequestOperation *operation, NSError *error) {
//handle failure
}];
[RKObjectManager.sharedManager enqueueObjectRequestOperation:operation];
Run Code Online (Sandbox Code Playgroud)
〜节日快乐
| 归档时间: |
|
| 查看次数: |
2279 次 |
| 最近记录: |