2017-04-27 15 views
0

私は、グローバルプロパティselectedTagIDsを観察し、rootViewControllerでメソッドを実行したいと思います。これは可能ですか? rootViewControllerへの参照はどのように取得できますか?rootViewControllerでメソッドを呼び出すことはできますか?

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() 
    } 
    } 
} 

答えて

1

rootViewControllerあなたはそれがそのメソッド呼び出しに応答することができます期待しているクラスの型である場合は、[はい、あなたはこのを行うことができます。条件付きでrootViewController as? MainViewControllerを確認します。

エラーが発生したのは、コードにappDelegateが含まれていると定義していないためです。これを修正するには、オプションの連鎖を使用してUIApplicationシングルトンのデリゲートをラップし、appDelegateの値として割り当てます。そこから我々は窓を得ることができるので、rootViewControllerviewControllerをアンラップすると、条件付きでタイプがMainViewControllerであるかどうかがチェックされ、その場合はfilterItems()になります。

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

thx私はそれを 'として! AppDelegate'しかし働いた! – timpone

関連する問題