Обновление месяцев спустя
Реальный ответ, что loader.params
является создание HTTP BODY
, следовательно, он работает для POST, PUT, DELETE
и т.д., но не для GET
где PARAMS добавляются к URL.
Следовательно, ответ ниже по-прежнему работает, если вы столкнулись с такой же проблемой для GET
, но если вы посылаете GET
запросы, это в основном с использованием методов, которые крепят Params к строке запроса.
Чтобы подытожить различия между ними.
Отправка PARAMS в HTTP Body (т.е. POST, UPDATE, DELETE
)
// Convert a NS Dictionary into Params
RKParams *params = [RKParams paramsWithDictionary:optionValues];
// I use sendObject to skip the router. Otherwise it's normally postObject
[[RKObjectManager sharedManager] sendObject:yourObject toResourcePath: yourResourcePath usingBlock:^(RKObjectLoader *loader) {
loader.method = RKRequestMethodPOST;
loader.delegate = delegate;
loader.params = params; // This sets params in the POST body and discards your yourObject mapping
} ];
Caveat Emptor (для выше)
Установка Params в блоке уничтожает любое отображение, которое вы могли бы установить в yourObject
, вид поражений - цель использования сопоставления объектов. Исправлено здесь Sebastian loader.params - Extra params, если вы действительно хотите использовать этот метод для добавления дополнительных параметров к своему сообщению не в объекте.
Отправка в Params в качестве строки запроса (т.е. GET
)
// Make a NS dictionary and use stringByAppendingQueryParameters
NSDictionary *shopParams = [NSDictionary dictionaryWithKeysAndObjects:
@"limit",@"20",
@"location",@"latitude,longitude",
nil];
[[RKObjectManager sharedManager] loadObjectsAtResourcePath:[@"/api/v1/shops.json" stringByAppendingQueryParameters:shopParams] delegate:objectDelegate];
Остальная часть ответа только для справки, я скопидом.
Старый Ответ
Я использую RestKit для моего проекта и сталкивается с той же проблемой.
я думаю RKParams
в основном используется POST
запросы. Я не могу полностью расшифровать ваш код, потому что 1) Я не знаю объявления loader
? 2) RKParams
не используется с Object Manager
?
Я сделал это.
Loader Метод в App Делегат
NSDictionary *shopParams = [NSDictionary dictionaryWithKeysAndObjects:@"limit",@"30", nil];
[[RKClient sharedClient] get:@"/api/v1/shops.json" queryParams:shopParams delegate:self];
Делегат
- (void)requestDidStartLoad:(RKRequest *)request {
NSLog(@"RK Request description: %@",[request description]);
}
Выход: RK Request description: <RKRequest: 0x7993db0>
и рельсы журнал говорят {"limit"=>"30"}
.
Из автозаполнения в Xcode вы можете видеть, что запрос get
даже не использовал RKParams
. Просто NSDict
. Запросы POST используют его.
Моя цель - прикрепить строку запроса, то есть ?location=singapore&etcetc
к моим методам API в Rails. Для этого в RK есть добавленный NSString
аддон под названием appendQueryParams
RK docs link, который можно использовать для добавления параметров запроса.
Если ваша цель POST
изображений и т. Д., Вы можете следовать приведенной выше строчке мышления об использовании RKClient
.
Update:
Если вы просто хотите добавить параметры в объект диспетчера
NSDictionary *shopParams = [NSDictionary dictionaryWithKeysAndObjects:
@"limit",@"20",
@"location",@"latitude,longitude",
nil];
Это является устаревшей и помечена для устаревания.
[[RKObjectManager sharedManager] loadObjectsAtResourcePath:[@"/api/v1/shops.json" appendQueryParams:shopParams] delegate:self];
Используйте вместо этого:
[[RKObjectManager sharedManager] loadObjectsAtResourcePath:[@"/api/v1/shops.json stringByAppendingQueryParameters:shopParams] delegate:yourLoaderDelegate];
Rails Log: {"location"=>"latitude,longitude", "limit"=>"20"}
Надежда в моем ответе я не делал никаких ошибочных утверждений.
См. Вопрос RestKit GET query parameters.
В конце концов, это то, что я тоже сделал. Однако я хотел использовать диспетчер объектов для использования функции отображения RestKit. –
@daemonsy Спасибо за это. Я некоторое время стучал головой о нее. – drewish
@drewish Спасибо. Каждый раз, когда кто-то находит это полезным, я попытаюсь обновить его, чтобы быть немного более основательным. –