AFNetworking 2.0 — использовать подкласс или нет?

Так что я работал с AFNetworking 2.0 последние несколько дней, и дела шли хорошо — я начал понимать библиотеку по мере того, как больше ей пользовался.

Вчера я понял, что создаю класс для обработки веб-служб моего приложения — GET / POST /DELETE и т. д.

Теперь AFNetworking уже справляется с этими вещами, и нет причин создавать собственный метод. Однако это та часть, на которой я застрял.

Вот краткий пример того, что я хочу сделать:

В классе типа DataStore я хотел бы сделать что-то вроде этого:

RCBaseDataStore.h

-(void)handelWebService: (int) webServiceID 
{

    Switch (webServiceID) 

    case: GET_STORE_ITEMS_WSID 
    {
       BBWebService *newService = [[BBWebService alloc]initWithURL:URL 
                                                       RequestType:@"GET" 
                                                       PostDataValuesAndKeys:nil 
                                                       RequestProperties:nil 
                                                       UrlParameters:urlParams];
    } 

} 

В приведенном выше примере я использовал индекс идентификаторов веб-сервисов — это позволяет использовать оператор switch — но существует 30 или 40 веб-сервисов — так что этот метод будет расти… намного.

Теперь мне нужно заставить BBWebService воздействовать на этот URL-адрес, который затем создает URL-адрес и объединяет параметры. Затем я передаю это другому методу внутри BBWebService, который запускает GET / POST requests

Проблемы, с которыми я сталкиваюсь:

  1. AFNetworking делает все это (построение URL-адреса и выполнение запроса) - Как мне использовать используемые им методы - не переопределяя их, а просто добавляя к ним?

Например, GET / POST requests — мне нужно сохранить responseObject в NSData object, что я могу сделать. Но мне не нужна эта логика в RCBaseDataStore — я хочу ее в BBWebService — но без переопределения методов в суперклассе AfNetworking, в котором я нашел бы исходные методы.

Я просмотрел файл AFRequestSteralization.h в библиотеке AFNetworking, и у него есть такой протокол:

 (NSURLRequest *)requestBySerializingRequest:(NSURLRequest *)request
                               withParameters:(NSDictionary *)parameters
                                        error:(NSError *__autoreleasing *)error;

В примечаниях сказано следующее:

Возвращает запрос с указанными параметрами, закодированными в копию исходного запроса.

@param request Исходный запрос. @param параметры Параметры, которые необходимо закодировать. @param error Ошибка, возникшая при попытке закодировать параметры запроса.

@return сериализованный запрос.

Теперь я должен заставить BBWebService соответствовать этому протоколу, а затем в RCBaseData Store иметь метод для выполнения запроса, сделанный по-другому - для GET / POST?

Первый аргумент - это то, в чем я не уверен - как мне создать объект NSURLRequest для GET /POST request?

Как только я отправлю запрос, как мне заставить BBWebService захватить ответ?

Когда я печатаю это, я думаю... сделать два класса, один ответ и один запрос? Я думаю, что я почти нашел решение, которое мне нужно, - просто нужно расчистить путь.


person Robert J. Clegg    schedule 01.11.2013    source источник


Ответы (1)


Больше так не делать.

Больше нет подкласса

Вы должны создать «собственный класс» и использовать AFHTTPOperationManager

Это в значительной степени это.

person Kiattisak Anoochitarom    schedule 01.11.2013
comment
Вместо этого я хотел бы использовать AFHTTPSessionManager для всех сетевых вещей, поскольку приложение будет только для iOS7. (можно использовать NSURLSession). Проблема, если в другом классе - как мне определить между POST/GET-запросами, не записывая массивный оператор IF в методе собственного класса? - Будут ли вместо этого использоваться протоколы AFNetworking? Здесь cocoadocs.org/docsets/AFNetworking/2.0.0/Protocols/ и этот: cocoadocs.org/docsets/AFNetworking/2.0 .0/Protocols/ Спасибо за помощь! - person Robert J. Clegg; 01.11.2013