Ich habe einen BaseController (BVC), wo ich angefangen habe, Benachrichtigungen in viewWillAppear & zu hören hören sie auf ViewWillDisappear Methoden.NSNotification für TabBarControllers
BVC
- CustomView (Notification received updates this VC)
Jetzt habe ich 4 verschiedene Controller von BVC subclassed.
BVC
|-- FirstVC (FVC)
|-- SecondVC (SVC)
|-- ThirdVC (TVC)
Nun, ich habe einen TarBarController, die diese drei VCs als seine Einzelteile über einen NavigationViewController (NVC) hat
TabBarController
|- NVC->FVC
|- NVC->SVC
|- NVC->TVC
Mein Problem ist, ich habe über eine playWillBegin Benachrichtigung von einem Singleton Senden Objekt, das eine AVPlayer-Instanz ist. Die Benachrichtigung wird von der VC empfangen, die oben aktiv ist, aber wenn ich die Tabs nicht schnell umschalte, werden die Benachrichtigungen in den anderen Controllern nicht empfangen.
Ich lese auch in SO, dass andere VC nicht instanziiert sind und das ist der Grund, warum die Benachrichtigungen nicht empfangen werden. Aber ich kann nicht init Methode in VC verwenden, weil seine Frage initWithaCoder verwenden
Mein Projekt ist alles Code und verwendet keine Storyboard usw. So ist meine TabBarController eine schnelle Klasse, hat die Elemente dort und TabBarController-Instanz in AppDelegate
EDIT 1: Relevante SO QA Links Link1 Link2
EDIT 2: um zu klären, warum ich in der Lage, nichts in init hinzufügen() -Methode des VC BaseViewController - Snippet
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]
}
}
Große Antwort, aber Ihre erste Theorie ist richtig und zweite ist verwirrend. Das OP ist fast sicher falsch, dass die vcs noch nicht zugeordnet sind. – danh
Einfach ausgedrückt, lautet die Antwort: Lassen Sie die vcs Benachrichtigungen für ihren gesamten Lebenszyklus beachten, nicht nur, wenn sie sichtbar sind. – danh
@danh Sie haben Recht - VCs zugewiesen werden sollte, aber es bedeutet nicht, dass ihre Ansichten geladen werden. Letzteres tritt normalerweise auf, wenn der Controller der Registerkarte zum ersten Mal angezeigt wird. – degapps