2015-08-05 2 views
1

У меня есть дополнительный viewController, который позволяет мне удалять изображения из рулона камеры. Проблема в том, что завершение работы Handler происходит, как предполагается, но popViewController на самом деле не работает около 8 секунд. Он определенно срабатывает, потому что я вижу дополнительный вывод. И я проверил, только что сделал поп, и он работает правильно. Я проверил событие viewWillDisapear, и он тоже срабатывает поздно, что я ожидал, учитывая, что навигационный контроллер еще не выталкивал view viewController.Почему popViewControllerAnimated занимает так много времени для запуска?

PHPhotoLibrary.sharedPhotoLibrary().performChanges({ 

    PHAssetChangeRequest.deleteAssets(assetsToDelete) 
     return 
    }, completionHandler: { success, error in 
     if success { 
      println("success") 
      println(navigationController.popViewControllerAnimated(true)) 
      println("so slow") 
     } 
     if let error = error { 
      println(error) 
     } 
     return 
}) 

ответ

6

Это то, что сказано в документации:

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

Контроллер навигации должен быть выполнен из основного потока, так что вам нужно обернуть вызов что-то вроде

dispatch_async(dispatch_get_main_queue()) { 
    navigationController.popViewControllerAnimated(true) 
} 
+0

Я был просто чтобы положить это. После небольшого проб и ошибок. Спасибо огромное! – Individual11

2

Для Swift 3

DispatchQueue.main.async() { 
    self.navigationController?.popViewController(animated: true) 
} 
Смежные вопросы