2016-04-08 10 views
3

過去5時間このバグを修正しようとしています。私は2つのVCを持っています。最初のVCでセグをトリガーするタップジェスチャーがあります。すばやいviewWillAppear遅れて

@IBAction func addMaterial(sender: AnyObject){ 
     dispatch_async(dispatch_get_main_queue()) { 
      self.performSegueWithIdentifier("addNewMaterialSegue", sender: self) 
     } 
    } 

二VC:

override func viewDidLoad() { 
    dispatch_async(dispatch_get_main_queue()) { 
     super.viewDidLoad() 
     print("viewDidLoad") 
    } 
} 


override func viewWillAppear(animated: Bool) { 
    print("viewWillAppear") 
    super.viewWillAppear(animated) 
} 

これは、のviewDidLoadからviewWillAppearに約5 secoundsかかります。私はI'm not the first to ask this questionを知っていますが、私は "ビューコントローラを作成してプレゼンテーションをメインスレッド上で実行する必要があります"とは違う解決策を見つけられませんでした。

+12

なぜ、viewDidLoadでdispatch_asyncを記述しましたか? –

+0

viewDidLoad内でこの行 'dispatch_async(dispatch_get_main_queue())'を使用するとどうなりますか? – Tuhin

答えて

4

サンプルコードのどこでもdispatch_asyncを削除してください。あなたはすでにメインキューにいます。

EDIT:

まあ、私は謝罪する必要があります。あなたのコードを試しましたが、問題は見つかりません。一見すると、すでにメインキューにあるdispatch_async呼び出しは本当に疑わしく見えます。そして私はまだ彼らを取り除かなければならないと思います。しかし、彼らはあなたが経験している問題を引き起こしません。あなたはたとえあなたがdispatch_asyncで呼び出しを入れても、ビューはどんな遅れもなく、本当に速く開いています。だから、別の問題があるはずです。たぶん、より多くの情報、より多くのコード、またはベストを与えることができます:プロジェクト全体。問題を見つけるのは簡単なはずです。

あなたはこのチェックを行うことができ、プロジェクトを離れて与えることができない場合は、次の

print("Current thread \(NSThread.currentThread())") 

すべての関与の機能のすべてのエントリに置き、これを。現在どのようなcontexが起こっているのかを見てみましょう。

+2

なぜこれが 'viewWillAppear'を遅く呼び出させるのかを少し詳しく説明してください。 – Jojodmo

+0

完了。念押し有難う。 – Darko

6

dispatch_asyncを削除します。あなたが言ったように、あなたのdispatch_asyncをプロセッサに伝える何

  • である:はい、メインスレッド上で、それを実行してください、これはUI関連のものですので。これはいい。
  • 非同期は言う:親愛なるプロセッサは、ただそこで行われる必要があることをである他に何を続ける - あなたのviewDidLoadは、おそらく他の多くのものが同様に
  • 残念なことにを行う必要があります呼び出して何でもので、これは良いことかもしれませんしかし、全体のビューの作成と表示のプロセスでは、物事はお互いに分かりやすく依存しています。ビューがロードされない場合(super.viewDidLoad()経由で)、VCはビューを表示するように準備することもできません。
  • 最後に、dispatch_asyncにいくつかの優先順位が与えられます。明示的に指定しないと、最も高い優先度を得ることはほとんどありません。したがって、他の多くのことが、プロセッサの呼び出しに優先して優先されます。

短いストーリーで、dispatch_asyncを削除すると、遅延がなくなります。

+0

いいえ、私はそれを試していませんでした。 (下記参照) – Darko

関連する問題