ナビゲーションコントローラスタックにプッシュされた3つのビューコントローラを持つアプリケーションがあります。 viewWillAppear
での通知のNotificationCenter:通知時のBAD_ACCESS
(A) -> (B) -> (C)
(A)
レジスタ:
NotificationCenter.default.addObserver(self, selector: #selector(reload), name: NSNotification.Name(rawValue: "DATA_CHANGED"), object: nil)
と(A
)viewWillDisappear
に登録解除:
NotificationCenter.default.removeObserver(self, name: NSNotification.Name(rawValue: "DATA_CHANGED"), object: nil)
さらに(A)
がdeinit()
に登録解除が、これが呼び出されることはありません。
(B)
はスタックにプッシュされ、(A)
のような同じイベントに対して登録/登録解除されます。
今すぐ(C)
が計算をトリガーするスタックにプッシュされ、(B)
にポップアップします。 (B)
が提示されている間いくつかの時間後に演算が終了したとの通知を解雇されています
NotificationCenter.default.post(name: NSNotification.Name(rawValue: "DATA_CHANGED"), object: nil)
しかし、これは
スレッド1の結果:EXC_BAD_ACCESS
私は確信しています通知名が間違っていて、クラッシュが発生していないため、通知が問題になります。また、(A)
と(B)
はスタック上に存在しているため、まだ割り当て解除されていません。私はプロファイラでゾンビを見つけることができませんでした。
何が問題なのでしょうか?
私はXCodeのを9beta6を使用していますし、スウィフト4
質問を編集してスタックトレースを表示してください。 – Paulw11
スタックトレースはありません。 EXC_BAD_ACCESSは赤い線としてしか得られません。 – netshark1000
例外ブレークポイントを設定して、影響を受ける行、実際の例外理由、およびスタックトレースを取得します。セレクタの署名が間違っている可能性があります。 – vadian