2016-12-03 4 views
3

В моем социальном приложении у меня есть экран «Home», на котором есть tableView, который содержит до трех разных ячеек! Затем я реализую метод источника данных didSelect, где я выполняю некоторые сравнения, чтобы определить, какую ячейку я только что выбрал ... (3 или 4 сравнения каждый раз). Для каждой ячейки, которую я выбираю, создается новый контроллер представления. фото презентация, еще одна для пользовательской презентации камеры и, наконец, для еще одной простой презентации View Controller ...View Controller не сразу отображается

Дело в том, что по необъяснимой причине, если я нажму кнопку iPhone домой, а затем снова открою приложение и отправлю его и выберите одну из этих ячеек, она занимает до 7 секунд, пока не появится контроллер вида! Затем, если я отклоню этот контроллер, вернитесь в «Главная» и выберите другую ячейку, все в порядке!

Есть ли у кого-нибудь идеи, что может произойти?

Edit:

if currentArea != "Somewhere" { 
     if gettingContent == false && objectsArray.count == 0 { 
      if firstOfLocalLeaderboard != nil { 
       if indexPath.row == 0 { 
        let vc = self.storyboard!.instantiateViewController(withIdentifier: "TopTenAreaController") as! TopTenAreaController 
        vc.area = currentArea 

        let navVC = UINavigationController() 
        navVC.viewControllers = [vc] 

        self.present(navVC, animated: true, completion: nil) 
       } 
       else if indexPath.row == 1 { 
        if localLeaderboard.count > 0 { 
         let vc = self.storyboard?.instantiateViewController(withIdentifier: "PhotoViewController") as! PhotoViewController 

         vc.objectsArray = localLeaderboard 
         vc.currentArea = currentArea 

         let navVC = UINavigationController() 
         navVC.viewControllers = [vc] 

         self.present(navVC, animated: true, completion: nil) 
        } 
        else { 
         let vc = self.storyboard!.instantiateViewController(withIdentifier: "CameraViewController") as! CameraViewController 
         vc.appearedFromHome = true 

         let navVC = UINavigationController() 
         navVC.viewControllers = [vc] 

         self.present(navVC, animated: true, completion: nil) 
        } 
       } 
      } 
      else { 
       if indexPath.row == 0 { 
        if localLeaderboard.count > 0 { 
         let vc = self.storyboard?.instantiateViewController(withIdentifier: "PhotoViewController") as! PhotoViewController 

         vc.objectsArray = localLeaderboard 
         vc.currentArea = currentArea 

         let navVC = UINavigationController() 
         navVC.viewControllers = [vc] 

         self.present(navVC, animated: true, completion: nil) 
        } 
        else { 
         let vc = self.storyboard!.instantiateViewController(withIdentifier: "CameraViewController") as! CameraViewController 
         vc.appearedFromHome = true 

         let navVC = UINavigationController() 
         navVC.viewControllers = [vc] 

         self.present(navVC, animated: true, completion: nil) 
        } 
       } 
      } 
     } 
+0

Можете ли вы опубликовать код, чтобы показать соответствующий 'метод didSelectRow', а также ваш' prepareForSegue'. – Rikh

+0

Вы что-то делаете в фоновом потоке? – Honey

+0

@Rikh Смотреть обновленный код –

ответ

2

Попробуйте

DispatchQueue.main.async { 
    // present vc 
} 
+0

Не могли бы вы объяснить, почему? – shallowThought

+2

он ничего не делает в фоновом режиме ... так что он уже на главной теме ... – Honey

+3

@shallowThought - обновления пользовательского интерфейса должны происходить в основном потоке, а если нет, вы можете видеть любопытные задержки. Поэтому Никита догадывается, что если вы видите странные задержки, что вы делаете что-то из фоновой темы. Если это правда, то, отправляя его в основной поток, он может его решить (если это действительно проблема). Лично, вместо того, чтобы посыпать код отправлениями в основной поток, я бы, вероятно, ввел предварительные условия (например, 'dispatchPrecondition (условие: .onQueue (.main))) и посмотреть, могу ли я подтвердить тезис Никиты и медленно отследить выяснить, как это происходит. – Rob

Смежные вопросы