Получить ответ NSURLConnection (из вспомогательного класса) внутри метода другого класса

У меня есть класс «WebAPI», который обрабатывает все вызовы веб-API, класс использует NSURLConnection через свои асинхронные вызовы на основе делегатов.

Всякий раз, когда объект должен связываться с веб-API, он будет использовать экземпляр WebAPI и вызывать требуемый метод, как показано ниже, в случае входа в систему. Я делаю следующий вызов из AppDelegate:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification { WebAPI *webAPI = [[WebAPI alloc] init]; [webAPI performLoginWithUserName:@"test1@myserver.com" andPassword:@"password"]; } 

Проблема заключается в том, что после выполнения вызова executeLoginWithUserName: andPassword код прогрессирует, и любой / весь ответ получен в методах делегатов, которые реализованы в WebAPI.m.

Это реальная проблема, потому что мне нужно иметь возможность получать коды ответов и любые данные, полученные в методе класса, откуда возник вызов в WebAPI. Я хотел бы иметь возможность:

 - (void)applicationDidFinishLaunching:(NSNotification *)aNotification { WebAPI *webAPI = [[WebAPI alloc] init]; WebAPIResponse * webAPIRespnse = [webAPI performLoginWithUserName:@"test1@myserver.com" andPassword:@"password"]; } 

Где класс WebAPIResponse – это настраиваемый класс, который будет содержать код состояния HTTP и любые полученные данные.

Это возможно, если я изменю WebAPI.m для использования NSURLConnection sendSynchronousRequest, но это не позволяет мне получать все HTTP-коды.

Какой был бы лучший способ выполнить это требование?

Спасибо за помощь.

2 Solutions collect form web for “Получить ответ NSURLConnection (из вспомогательного класса) внутри метода другого класса”

Вы можете использовать блоки для обработки ответов. Например:

 WebApi.h - (void)performLoginWithUsername:(NSString *)userName andPassword:(NSString *)password successBlock:(void(^)(NSData *response))successBlock failureBlock:(void(^)(NSError *error))failureBlock; WebApi.m @interface WebAPI() @property (nonatomic, copy) void(^authorizationSuccessBlock)(NSData *response); @property (nonatomic, copy) void(^authorizationFailureBlock)(NSError *error); @end @implementation WebAPI - (void)performLoginWithUsername:(NSString *)userName andPassword:(NSString *)password successBlock:(void(^)(NSData *response))successBlock failureBlock:(void(^)(NSError *error))failureBlock { self.authorizationSuccessBlock = successBlock; self.authorizationFailureBlock = failureBlock; // NSURLConnection call for authorization here } - (void)connectionDidFinishLoading:(NSURLConnection *)connection { if (self.authorizationSuccessBlock != nil) { self.authorizationSuccessBlock(data); self.authorizationSuccessBlock = nil; } } - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { if (self.authorizationFailureBlock != nil) { self.authorizationFailureBlock(error); self.authorizationFailureBlock = nil; } } AppDelegate.m - (void)applicationDidFinishLaunching:(NSNotification *)aNotification { WebAPI *webAPI = [[WebAPI alloc] init]; [webAPI performLoginWithUserName:@"test1@myserver.com" andPassword:@"password" successBlock:^(NSData *response) { // Handle result here } failureBlock:^(NSError *error) { // Handle error here }]; 

}

Измените свой класс WebAPI чтобы предоставить собственный интерфейс делегата, или использовать блоки завершения в запросе, вызываемые при завершении асинхронного подключения.

  • Коды NSError: URL-адрес Загрузка системных ошибок, которые означают потерю сети
  • NSURLSession / NSURLConnection Ошибка загрузки HTTP (kCFStreamErrorDomainSSL, -9813)
  • Соединение NSURLConnection с сервером, но не размещение данных
  • Утечка NSURLConnection в Свифте
  • Добавить процесс загрузки NSURLConnection в UIProgressView
  • NSURLConnection и sendAsynchronousRequest: queue: completeHandler: - выполняется ли блок завершения в основном потоке
  • Выполнение сетевых и других трудоемких задач в фоновом режиме
  • Как я могу отменить асинхронный вызов через NSURLConnection sendAsynchronousRequest?
  • Кодирование строки UIImage в Base64, не работающей при передаче на сервер
  • Objective-c, передавая результат NSURLConnection в контроллер View
  • Метод делегата NSURLConnection
  • Чтение NSURLresponse
  • Interesting Posts

    Последствия «Встроенные dylibs / frameworks работают только на iOS 8 или более поздней версии»

    Возможно ли создать inputAccessoryView над клавиатурой для полной ширины экрана в режиме разделения?

    Как получить время прослушивания MPMediaItem (песни) (даты)

    моделирование повторяющегося события в базе данных и использование UILocalNotification для запуска события

    Преобразование NSData в NSString возвращает nil

    SSL-соединение с AFNetworking 2.0, обеспечивающее POST-запросы независимо от используемого файла сертификата

    После установки XCode 7 я больше не могу создавать и запускать проекты, поскольку документ не открывается

    Шаблоны / пузырьки выбора жанра музыки Apple

    Ошибка приложения при попытке загрузить большую часть данных в мое приложение

    Непоследовательный, но частый доступ к EXC_BAD_ACCESS с помощью sqlite3_step (statement)

    Переключение диспетчеров представлений между 2 экранными навигационными контроллерами вызывает непоследовательное исключение иерархии

    <FIRMessaging / WARNING> Регистрация FIRMessaging не готова с учетными данными auth

    Почему пользователи загружают старые версии нашего приложения для iOS?

    MQTT по реагенту?

    Сделать шрифт растут вместе с UILabel (измененный с помощью Auto Layout) – как это сделать в Interface Builder?

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.