Как у меня есть два почтовых маршрута для одного и того же класса в RestKit - PullRequest
3 голосов
/ 17 сентября 2011

Поскольку я не мог понять, как настроить два разных пути ресурса POST для одного и того же класса, я попытался вручную создать запрос RKObjectLoader, но, похоже, продолжает посылать запрос GET вместо POST, даже если я установил метод ПОСТ. Вот мой код

User *user = [[User alloc] init];
user.uname = uname;
user.pwd = pwd;


RKObjectManager *svc = [RKObjectManager sharedManager];
RKObjectMapping* mapping = [svc.mappingProvider objectMappingForClass:[User class]];

// what I was using before I needed two post resource paths//[svc postObject:user mapResponseWith:mapping delegate:self];

RKObjectLoader *loader = [svc loadObjectsAtResourcePath:authResourcePath objectMapping:mapping delegate:self];
[loader setMethod:RKRequestMethodPOST];
loader.userData = [NSNumber numberWithInt:RequestLogin];
loader.params = [NSDictionary dictionaryWithObjectsAndKeys:
                       uname, @"uname",
                       pwd, @"pwd",
                       nil];



[loader setSourceObject:user];
[loader send];
[user release];

Ответы [ 2 ]

6 голосов
/ 21 сентября 2011

В тех случаях, когда у вас есть несколько путей к POST или PUT, проще всего воспользоваться блочной формой вызова postObject: и указать целевой resourcePath самостоятельно:

[[RKObjectManager sharedManager] postObject:foo delegate:bar block:^(RKObjectLoader *loader) {
    loader.resourcePath = @"/my/destinationPath";
}];      

В какой-то момент мы можем ввести концепцию именованного маршрута, которая позволит вам устранить неоднозначность маршрутов с использованием имен, но пока она основана исключительно на глаголе HTTP.

Обратите внимание, что вы НЕ и не можете зарегистрировать дополнительный путь на маршрутизаторе - вы полностью обойдете его для дополнительного пути.

4 голосов
/ 14 февраля 2012

Чтобы завершить ответ Блейка Уоттерса, если для другого маршрута требуется другое сопоставление объектов, вам необходимо сделать:

[[RKObjectManager sharedManager] postObject:query delegate:saveJobQueryHandler block:^(RKObjectLoader* loader) {
    loader.objectMapping = NEW_MAPPING;
    loader.resourcePath = @"/other/url";
    loader.targetObject = nil;  // Important
}];

Для получения дополнительной информации о loader.targetObject = nil; чтение sendObject: делегат: блок:

...