Подтвердить что ты не робот

Не получать успешные/неудачные обратные вызовы для расширения общего доступа с использованием AFNetworking

У меня проблема с AFNetworking в расширении share. В didSelectPost я звоню:

[[AuthClient sharedClient] POST: @"/v1/events"
    parameters: params success: ^ (AFHTTPRequestOperation * operation, id responseObject) {
        [self.extensionContext completeRequestReturningItems: nil completionHandler: nil];
    }
    failure: ^ (AFHTTPRequestOperation * operation, NSError * error) {
        NSLog(@"error: %@", error);
        [self.extensionContext cancelRequestWithError: error];
    }
];

[AuthClient sharedClient] использует шаблон singleton, чтобы получить экземпляр AFHTTPSessionManager с NSURLSessionConfiguration, установленный с идентификатором фона.

Тем не менее, не вызываются обратные вызовы с успехом или неудачей, и он просто зависает бесконечно, пока не будет убито расширение. Интересно, что HTTP-запрос заканчивается на стороне сервера; завершение просто не будет вызвано.

4b9b3361

Ответ 1

Я думаю, проблема не в AFNetworking, а проблема в этом одиночном классе. Вы не указали свою архитектуру приложения, но я предполагаю, что вы можете вызывать несколько API-интерфейсов в разных контроллерах представлений, используя один и тот же тег [AuthClient sharedClient] одновременно. Следовательно, вы фактически получаете вызов success, но не для вышеупомянутого вызова, а некоторые где-то еще в вашем контроллере. Я столкнулся с точной проблемой в моем приложении UITabbarController, где я делал вызовы API в viewDidLoad разных диспетчеров представлений, и мой тестер постоянно менял все вкладки. Таким образом, я попытался получить ответ для первого контроллера представления (1-я вкладка) и использовал для получения ответа во втором контроллере просмотра (2-я вкладка), что было неправильно!

Ответ 2

1) Попробуйте выполнить этот запрос в Postman, для проверки правильного пути и параметров, если ok → 2.

2) Попробуйте использовать конфигурацию сеанса, подобную этой

NSURLSessionConfiguration *sessionConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration];

// Initialize Session Manager
AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:sessionConfiguration];

в этот момент мы можем предположить, что ваш синглтон был инициализирован для другого запроса с другой конфигурацией.

3) аналогичная проблема

4) о фон AFNetworking

P.S. Попытайтесь использовать простой асинхронный основной поток, при использовании счетчика при ожидании ответа

Ответ 3

Некоторые вещи, которые я попробую:

  • Сделайте проверку работоспособности с сетевой трассировкой; и убедитесь, что данные, которые вы ожидание достигнет клиента.
  • Установите точку останова и найдите заблокированные потоки или аномалии (даже подумайте о том, чтобы взломать API-интерфейсы Apple, т.е. CFNetworking или NSURLSession и т.д.).
  • Убедитесь, что блоки лямбда/завершения должным образом устанавливаются/сохраняются вашим одноэлементным объектом/пытаются написать простую тестовую процедуру, не используя синглтон, чтобы увидеть, имеет ли значение это значение (например, путем ручного создания экземпляра класса и его использования).
  • Непонятно из фрагмента, если обработчик завершения "success" выводит сообщение об отладке - рассмотрите также добавление NSLog, если он еще не находится в обработчике.

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