Фрагмент вашего кода выглядит немного устаревшим. Я настоятельно рекомендую прочитать новейшее руководство Object Mapping , чтобы максимально использовать RestKit - особенно его часть Mapping без KVC .
Edit:
Чтобы опубликовать объект с помощью RestKit и получить ответ, мы определяем класс TranslationRequest
, который будет содержать наш запрос, и Translation
для хранения нашего ответа.
Во-первых, мы настраиваем наши RKObjectManager
и сопоставления (я обычно делаю это в моем AppDelegate):
RKObjectManager *manager = [RKObjectManager objectManagerWithBaseURL:kOurBaseUrl];
[manager setSerializationMIMEType:RKMIMETypeJSON];
//this is a singleton, but we keep the manager variable to avoid using [RKObjectManager sharedManager] all the time
//Here we define a mapping for the request. Note: We define it as a mapping from JSON to entity and use inverseMapping selector later.
RKObjectMapping *translationRequestMapping = [RKObjectMapping mappingForClass:[TranslationRequest class]];
[translationRequestMapping mapKeyPath:@"RegionTag" toAttribute:@"regionTag"];
...
[[manager mappingProvider] setSerializationMapping:[translationRequestMapping inverseMapping] forClass:[TranslationRequest class]];
//now we define the mapping for our response object
RKObjectMapping *translationMapping = [RKObjectMapping mappingForClass:[Translation class]];
[translationMapping mapKeyPath:@"id" toAttribute:@"identifier"];
[translationMapping mapKeyPath:@"Translation" toAttribute:@"translation"];
[[manager mappingProvider] addObjectMapping:mapping];
//finally, we route our TranslationRequest class to a given endpoint
[[manager router] routeClass:[TranslationRequest class] toResourcePath:kMyPostEndpoint];
Этого должно быть достаточно для необходимой настройки. Мы можем вызвать наш бэкэнд в любом месте кода (например, в любом контроллере) следующим образом:
//we create new TranslationRequest
TranslationRequest *request = [[TranslationRequest alloc] init];
[request setRegionTag:@"Hello"];
....
//then we fetch the desired mapping to map our response with
RKObjectMapping *responseMapping = [[RKObjectManager sharedManager].mappingProvider objectMappingForClass:class]
//and just call it. Be sure to let 'self' implement the required RKObjectManagerDelegate protocol
[[RKObjectManager sharedManager] postObject:request mapResponseWith:responseMapping delegate:self];]
Попробуйте этот подход и дайте мне знать, если вам понадобится какая-либо помощь. Я не смог протестировать его полностью, поскольку у меня нет подходящего бэкэнда, который будет возвращать ответы, но, судя по журналу RestKit, это должно сработать.