두 매핑이 답이라고 생각하는 것이 맞습니다. RestKit의 최신 버전을 사용한다고 가정하면 다음과 같은 기능이 작동합니다.
RestKit이 제공해야하는 것을 실제로 활용하려면 JSON이 Key Value Coding을 준수해야합니다. 예를 들어,이 예제에서 JSON은 "응답"키로 싸여 있습니다.
저는 방금 작업하고있는이 프로젝트에서이 이름을 모두 변경했습니다. 이것은 올바른 길로 가야합니다.
RKObjectMapping *postObjectMapping = [RKObjectMapping requestMapping];
[postObjectMapping addAttributeMappingsFromDictionary:@{
@"param1" : @"param1",
@"param2" : @"param2"}];
RKRequestDescriptor *requestDescriptor = [RKRequestDescriptor requestDescriptorWithMapping:postObjectMapping objectClass:[PostObjectModel class] rootKeyPath:nil];
RKObjectMapping *returnedObjectMapping = [RKObjectMapping mappingForClass:[ReturnedModel class]];
[returnedObjectMapping addAttributeMappingsFromDictionary:@{
@"returnedParam1" : @"returnedParam1",
@"returnedParam2": @"returnedParam2",
@"returnedParam3": @"returnedParam3"}];
RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:returnedObjectMapping pathPattern:nil keyPath:@"Response" statusCodes:[NSIndexSet indexSetWithIndex:200]];
RKObjectMapping *errorMapping = [RKObjectMapping mappingForClass:[RKErrorMessage class]];
[errorMapping addPropertyMapping:[RKAttributeMapping attributeMappingFromKeyPath:@"error" toKeyPath:@"errorMessage"]];
NSIndexSet *statusCodes = RKStatusCodeIndexSetForClass(RKStatusCodeClassClientError);
RKResponseDescriptor *errorDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:errorMapping pathPattern:nil keyPath:@"errors" statusCodes:statusCodes];
PostModel *objectToBePosted = [PostModel new];
[login setParam1:something];
[login setParam2:something];
RKObjectManager *objectManager = [RKObjectManager managerWithBaseURL:[NSURL URLWithString:@"http://BASEURLHERE"]];
[objectManager addRequestDescriptor:requestDescriptor];
[objectManager addResponseDescriptor:responseDescriptor];
[objectManager addResponseDescriptor:errorDescriptor];
NSMutableURLRequest *request = [objectManager requestWithObject:objectToBePosted method:RKRequestMethodPOST path:@"/REST/OF/PATH/GOES/HERE" parameters:nil];
RKObjectRequestOperation *operation = [objectManager objectRequestOperationWithRequest:request
success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
NSLog(@"Success block: %@", mappingResult);
} failure: ^(RKObjectRequestOperation *operation, NSError *error) {
NSLog(@"Failed with error: %@", [error localizedDescription]);
}];
[objectManager enqueueObjectRequestOperation:operation];
}
mElling의 대답이 작동하게 된 이유가 무엇입니까? 그렇다면 자신의 답이 아니라 대답을 받아 들여야합니까? – PaReeOhNos