私はviewWillAppear &の通知をlistenするために開始したBaseController(BVC)を、viewWillDisappearメソッドでリッスンを停止しました。TabBarControllersのNSNotification
BVC
- CustomView (Notification received updates this VC)
私はBVCから4つのコントローラをサブクラス化しました。
BVC
|-- FirstVC (FVC)
|-- SecondVC (SVC)
|-- ThirdVC (TVC)
は今、私はNavigationViewController(NVC)を介してこれらの3つのVCのようにそのアイテムを持っている1 TarBarController
TabBarController
|- NVC->FVC
|- NVC->SVC
|- NVC->TVC
私の問題があり、私はシングルトンからplayWillBegin通知渡って送信しましたをしましたオブジェクトはAVPlayerインスタンスです。一番上でアクティブなVCからの通知が受信されますが、タブをすばやく切り替えると他のコントローラでは通知が受信されません。
私もSOで読みました。他のVCはインスタンス化されておらず、それは通知が受信されない理由です。しかし、私はVCでinitメソッドを使用することはできません。なぜなら、initWithaCoderを使用するように頼んでいるからです。
私のプロジェクトはすべてコードであり、ストーリーボードなどは使用しません。したがって、私のTabBarControllerは即時クラスで、AppDelegateのTabBarControllerインスタンス
EDIT 1:私はINITに何も追加することができないよ、なぜ明確にするために(VC の)方法BaseViewController - スニペット
012:関連SO QAが Link1 Link2EDIT 2リンク
init() {
super.init() //Please refer image for error message
}
required init?(coder aDecoder: NSCoder) {
}
TabBarController
class TabBarController: UITabBarController, UITabBarControllerDelegate {
override func viewDidLoad() {
tabBar.tintColor = UIColor.whiteColor()
self.delegate = self
let FNVC = UINavigationController(rootViewController: FVC())
//Other initialization code
let SNVC = UINavigationController(rootViewController: SVC())
//Other initialization code
let TNVC = UINavigationController(rootViewController: TVC())
//Other initialization code
viewControllers = [FNVC, SNVC, TNVC]
}
}
グレート答えが、あなたのこの場合、ビューの読み込みを強制的に、あなたが
[vc view]
呼び出しを省略することができます必要はありません最初の理論は正しく、2番目の理論は混乱しています。 OPは、vcsがまだ割り当てられていないという確かに間違いです。 – danhもっと簡単に言えば、答えは次のようなものです。vcsに、表示されたときだけでなく、ライフサイクル全体の通知を観察させます。 – danh
@danhあなたは正しいです - VCを割り当てる必要がありますが、ビューがロードされているわけではありません。後者は、タブのコントローラが初めて表示されるときに一般的に発生します。 – degapps