2016-12-03 5 views
3

私のソーシャルアプリでは、最大3つの異なるセルを含むtableViewがある「ホーム」画面があります。次に、didSelectデータソースメソッドを実装します。ここでは、いくつかの比較を実行して、選択したセルの種類を判断します。(毎回3回または4回の比較)選択したすべてのセルに対して、新しいView Controllerがインスタンス化されます。写真プレゼンテーション、別のカスタムカメラプレゼンテーション用、最後にもう1つのシンプルなView Controllerプレゼンテーション用...View Controllerがすぐに表示されない

説明できない理由のために、私はiPhoneのホームボタンを押してから再度開いてそれらのセルの1つを選択すると、ビューコントローラが表示されるまで最大7秒かかります!次に、そのView Controllerを終了し、「Home」に戻り、別のセルを選択すると、すべてがokです!

何が起こっている可能性がありますか?

編集:

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

を試してみてください。 – Rikh

+0

バックグラウンドスレッドで何かしていますか? – Honey

+0

@Rikh更新されたコードを見る –

答えて

2

はあなたにも、関連する `didSelectRow`方法と、あなたの` prepareForSegue`を表示するためにいくつかのコードを投稿してくださいすることができ、この

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

理由を教えてください。 – shallowThought

+2

彼はバックグラウンドで何もしていないので、彼はすでにメインスレッドにいます... – Honey

+3

@shallowThought - UIの更新はメインスレッドで行われなければなりません。そうしなければ、奇妙な遅延が見えます。だからニキータはあなたが奇妙な遅れを見ているなら、あなたはバックグラウンドスレッドから何かをやっていると推測しています。それが本当であれば、それをメインスレッドにディスパッチして、それを解決することができます(それが本当に問題であれば)。個人的には、コードをメインスレッドに振りかざすのではなく、前提条件(例えば 'dispatchPrecondition(condition:.onQueue(.main))')を挿入し、Nikitaの論文を確認して、それがどのように起こっているのか把握してください。 – Rob

関連する問題