私としてRootViewControllerを継承oneViewControllerとtwoViewControllerという名前なぜ継承された変数が迅速に初期化されないのですか?
import UIKit
class RootViewController: UIViewController {
var amIaccessible: Bool = false
override func viewDidLoad() {
super.viewDidLoad()
}
}
と2サブコントローラとしてRootViewControllerという名前のメインのUIViewControllerを持っています(また、私のコメントを読んで)今
import UIKit
class oneViewController: RootViewController {
var amIaccessible: Bool = false
override func viewDidLoad() {
super.viewDidLoad()
amIaccessible = true // I have initialized this variable of RootViewController
}
}
import UIKit
class twoViewController: RootViewController {
var amIaccessible: Bool = false
override func viewDidLoad() {
super.viewDidLoad()
print(amIaccessible) // it should print true as initialized in oneViewController but its printing false :(
}
}
問題私のoneViewControllerは私のアプリケーションの初期ビューであり、twoViewControllerは最初のビューの後に初期化された2番目のビューなので、私はルートを必要としますViewControllerは、私の変数とメソッドをアプリのライフサイクル全体にわたって保持することができる私のシングルトンタイプのコントローラです。どのように私はこれを達成することができる?
私は、別のシングルトンクラスのようなソリューションは必要ありません。私は、アプリ実行中に変数を保持できる共有インスタンスを作成することもできます。 ので、ここで継承関係
sepの代わりにビューコントローラに変数を配置する際の問題(私が確かに推奨する)アライメントモデルオブジェクトは、View Controllerのライフサイクルを制御しないということです。 iOSはそれらを自由に作成して破壊します。そのことについては何もできません。そのシングルトンオブジェクトへのアクセスを透過的にする場合は、集計されたプロパティまたは関数をベースビューコントローラに追加して、集中シングルトンへのアクセスを非表示にします。 – dasblinkenlight
クラスの継承がどのように機能するか誤解しています。 'RootViewController'はシングルトンではありません。それはあなたの2つの他のView Controllerのそれぞれのスーパークラスです。各ビューコントローラには、 'RootViewController'によって宣言されたプロパティの独自のインスタンスがあります。一つのビューコントローラインスタンスで' super.amIaccessible'を変更しても、別のビューコントローラインスタンスの値は変更されません。 – Paulw11