UIViewController presentViewController: анимированный: завершение – от 4 до 6 секунд для запуска

Я создаю модуль входа, в котором учетные данные, введенные пользователем, проверяются в бэкэнд-системе. Я использую асинхронный вызов для проверки учетных данных и после аутентификации пользователя. Переходим к следующему экрану с помощью метода presentViewController:animated:completion . Проблема в том, что presentViewController метода presentViewController занимает абонентское время, пока не появится следующий экран. Боюсь, что мой предыдущий вызов sendAsynchronousRequest:request queue:queue completionHandler: каким-то образом создает побочный эффект.

Просто чтобы убедиться, что, когда я говорю 4-6 секунд, после команды presentViewController:animated:completion запуска. Я говорю это, потому что я отлаживаю код и отслеживаю момент вызова метода.

Во-первых: метод NSURLConnection называется:

 NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10.0]; NSOperationQueue *queue = [[NSOperationQueue alloc] init]; [NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) 

Второе: метод UIViewController вызван тем, что выполняется ненормальное время

 UIViewController *firstViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"FirstView"]; [self presentViewController:firstViewController animated:YES completion:nil]; 

Любая помощь приветствуется.

спасибо, Маркос.

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

 [NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) { dispatch_async(dispatch_get_main_queue(), ^{ UIViewController *firstViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"FirstView"]; [self presentViewController:firstViewController animated:YES completion:nil]; }); } 

Это гарантирует, что ваш код работает в основном потоке.

  • Почему вы установили на ноль и выпустили свойство UIViewController?
  • Как остановить клавиатуру от прокрутки таблицы
  • Должен ли я загружать информацию в контроллер или класс данных?
  • Если я добавлю контроллер детского представления и использую его для представления другого контроллера представления, весь корневой вид будет заменен?
  • установка цвета фона UIView из UIViewController
  • Изменение цвета UINavigationBar для одного вида контроллера
  • Цвет фона (colorWithPatternImage), не заполняющий весь вид для iPad
  • Приложение с более чем 80 UIViewController?
  • Каков наилучший способ принудительного вращения на контроллере представления, который не отображается?
  • вызов родительского метода viewcontroller при отключении дочернего контроллера просмотра
  • Как iOS знает, какой контроллер просмотра должен быть активным?
  • Давайте будем гением компьютера.