2017-04-27 4 views
0

Ich möchte die globale Eigenschaft selectedTagIDs beobachten und eine Methode für den rootViewController ausführen. Ist das möglich? Wie bekomme ich einen Verweis auf den rootViewController?Ist es möglich, eine Methode auf dem rootViewController aufzurufen?

import UIKit 

class Global { 
    static var sharedInstance = Global() 
    var tags = [Tag]() 
    var selectedTagIDs = [Int]() { 
    didSet { 
     // get error `use of unresolved identifier appDelegate` 
     let viewController = appDelegate.window!.rootViewController as! MainViewController 
     viewController.filterItems() 
    } 
    } 
} 

Antwort

1

Ja können Sie dieses wenn tun, um Ihre rootViewController von der Art der Klasse, die Sie erwarten, dass in diesem Methodenaufruf reagieren kann. Überprüfen Sie auf die rootViewController as? MainViewController bedingt.

Der Grund, warum Sie diesen Fehler erhalten, ist, weil Sie nicht definiert haben, was appDelegate in Ihrem Code ist. Um dies zu beheben, können wir eine optionale Verkettung verwenden, um den UIApplication Singleton-Delegaten auszupacken und ihn als Wert von zuzuweisen. Und von dort können wir das Fenster und damit die rootViewController bekommen. Als wir die viewController auspacken, prüfen wir konditionell, ob es vom Typ MainViewController ist und wenn ja, sagen Sie es an filterItems().

if let appDelegate = UIApplication.shared.delegate as? AppDelegate, let viewController = appDelegate.window!.rootViewController as? MainViewController { 
    viewController.filterItems() 
} 
+1

thx Ich musste es tun als 'wie! AppDelegate' aber funktioniert! – timpone

Verwandte Themen