Как сделать в Restkit запрос PUT без тела, параметров URL и вернуть объект

Допустим, мне нужно сделать этот динамический запрос PUT: "http://mydomain.com/api/5?value=66"

Тело пусто. В ответ я получу статус 201 (Создано), а в теле я верну json-объект, назовем его MyObject с полями NSNumber* Id, NSString* name;

Теперь в рестките у меня есть такие варианты:

- [[RKObjectManager sharedManager]  putObject:nil mapResponseWith:MyMapping delegate:self]; 

MyMapping сопоставляет MyObject. Проблема в том, что если я отправляю nil, он не знает сопоставления и выдает «Невозможно найти маршрутизируемый путь для объекта типа «(null)» для HTTP-метода «PUT»».

- [[RKClient sharedClient] put:putUrl params:nil delegate:self];

где putUrl = "http://mydomain.com/api/5?value=66" Проблема здесь в том, что для ответа нет сопоставления, поэтому вызывается только didLoadResponse, а didLoadObjects никогда не вызывается

[objectManager.router routeClass:[MyObject class] toResourcePath:putUrl forMethod:RKRequestMethodPUT]; 
    MyObject *obj = [[MyObject alloc] init];

    [[RKObjectManager sharedManager]  putObject:obj mapResponseWith:MyMapping  delegate:self];

Проблема здесь в том, что сначала я подделываю это (отправляю MyObject как параметр, а это не так), и это работает только в первый раз. во второй раз, когда я пытаюсь использовать этот метод, я получаю это исключение: «Маршрут уже зарегистрирован для класса« MyObject »и HTTP-метода« PUT »»

Любое предложение, что делать?

Спасибо


person ozba    schedule 09.08.2012    source источник


Ответы (1)


Если кому-то интересно, я нашел ответ, увидев, что делает ресткит.

putUrl = "http://mydomain.com/api/5?value=66";

MyMapping maps the returned MyObject that has fields NSNumber* Id, NSString* name;

Вот код, чтобы заставить его работать:

void (^blockLoader)(RKObjectLoader *);

blockLoader = ^(RKObjectLoader *loader) {
    loader.delegate = self;
    loader.objectMapping = MyMapping;
};

NSString *resourcePath = putUrl;

[[RKObjectManager sharedManager] sendObject:nil toResourcePath:resourcePath usingBlock:^(RKObjectLoader *loader) {
    loader.method = RKRequestMethodPUT;
    blockLoader(loader);
}];
person ozba    schedule 09.08.2012