RestKit: изменить базовый URL-адрес RKObjectManager

Можно ли изменить базовый URL-адрес RKObjectManager после создания?

У меня есть поле для входа, и по нику я решаю, какой URL для API мне следует использовать. Если я создам RKObjectManager после заполнения ника/пароля, я смогу сделать только один вызов из RestKit ( https://groups.google.com/forum/?fromgroups#!topic/restkit/wFNhpCW-URA ). Если я создаю функцию RKObjectManager viewDidLoad - я не могу изменить URL.

Есть такое же решение моей проблемы?

Спасибо.


person kraag22    schedule 08.05.2012    source источник


Ответы (4)


Просто потратил некоторое время на то, чтобы выяснить, как это можно сделать в версии 0.20. Насколько я могу судить, вы не можете напрямую изменить базовый URL-адрес, не заходя в исходный код AFNetworking. Вы можете создать новый HTTPClient и установить его, но я обнаружил, что это вызывает еще больше проблем, предположительно потому, что RestKit выполняет дополнительную настройку HTTPClient AFNetworking, когда вы настраиваете RKObjectManager, и путем настройки клиента напрямую. вы упускаете это.

Я придумал это решение, которое состоит в том, чтобы создать еще один RKObjectManager с новым базовым URL-адресом и повторно добавить дескрипторы. Вам также потребуется снова установить сериализацию и типы заголовков.

NSString *urlString = @"http://www.something.com/api";
RKObjectManager *newManager = [RKObjectManager managerWithBaseURL:[NSURL URLWithString:urlString]];
[newManager setRequestSerializationMIMEType:RKMIMETypeJSON];
[newManager setAcceptHeaderWithMIMEType:RKMIMETypeJSON];
[newManager addResponseDescriptorsFromArray:[RKObjectManager sharedManager].responseDescriptors];
[newManager addRequestDescriptorsFromArray:[RKObjectManager sharedManager].requestDescriptors];
[RKObjectManager setSharedManager:newManager];

Связанная документация: Использование нескольких базовых URL-адресов в RestKit

person Kyle Clegg    schedule 18.06.2013
comment
шутки в сторону? вам нужно повторно добавить все дескрипторы, чтобы изменить baseUrl? РЕДАКТИРОВАТЬ: Хорошо, после прочтения документации я понимаю, почему, потому что вы не хотите менять базовый URL-адрес, пока запросы все еще выполняются, и т. д. Так что я думаю, просто реализуйте приведенный выше код и продолжайте с ним. - person deepwinter; 26.01.2014

Вот как изменить RestKit baseURL после инициализации:

[RKObjectManager sharedManager].client.baseURL = [RKURL URLWithString:newBaseUrlString];

Уведомление из документа RestKit:

Побочным эффектом изменения baseURL является перестроение экземпляра requestCache. Кэши поддерживаются отдельно для каждого хоста.

Я использую его, и он отлично работает :)

person Antoine Beloeuvre    schedule 31.08.2012
comment
Это работает для меня в RestKit v0.20: [[RKObjectManager sharedManager] setHTTPClient:[AFHTTPClient clientWithBaseURL:[NSURL URLWithString:@"https://api.somewhere.com"]]]; - person GivP; 13.05.2014

Будь осторожен!

Я использовал принятый ответ для RestKit 2.0, НО, к сожалению, это привело к сложному отладке сбоя в рестките. Что сработало, так это просто инкапсулировать все создание дескриптора и другие настройки диспетчера объектов в метод и вызвать его с новым объектом диспетчера объектов перед вызовом [RKObjectManager setSharedManager:newManager];

person deepwinter    schedule 31.01.2014
comment
Да, единственный способ — это перестроить ваш RKObjectManager и все соответствующие настройки. - person saiday; 11.09.2017

Я не думаю, что есть решение для этого. RestKit использует базовый URL-адрес для внутреннего использования, и его нельзя изменить.

person kraag22    schedule 17.05.2012