2017-12-18 12 views
1

マイアプリにはナビゲーションバーが実装されています。メインビューと設定ビューがあります。設定ビューでは、UserDefaultsを使用してユーザーの設定を保存します。次にメインビューに戻ると、新しい設定が表示されません。それは私がアプリを再び開いた後にのみ現れる。私はViewControllerのviewDidLoadメソッドでユーザーのデフォルト値を読み込みます。設定ビューからメインビューに戻ると、viewDidLoadメソッドが再び呼び出されないようです。では、代わりにユーザーのデフォルトからデータをロードする必要がありますか?ここでユーザーのデフォルトからデータをロードする場所

は、私は好みをロードする方法である:

override func viewDidLoad() { 
    super.viewDidLoad() 
    numberOfPeople = defaults.double(forKey: "numberOfPeopleDefault") 
    tipPercentage = defaults.double(forKey: "tipPercentageDefault")/100.0 
} 
+0

あなたはビューコントローラ彼は、「設定」について話している –

+0

の間でデータを渡すためにUserDefaultsを使用してはならない、彼はおそらく同じ場所にこれらの変数を格納する必要があり、キャッシュ、または何でもあるかもしれません。要は、 'viewDidLoad'は一度だけ呼び出されるので、' previous'ビューコントローラの「refreshing」はそこでは行えません。 –

答えて

4

あなたは(ViewControllerが表示されるたびに呼ばれる)viewWillAppear内のあなたの変数を移動するかもしれません、例えば:

override func viewWillAppear(_ animated: Bool) { 
    super.viewWillAppear(animated) 

    numberOfPeople = defaults.double(forKey: "numberOfPeopleDefault") 
    tipPercentage = defaults.double(forKey: "tipPercentageDefault")/100.0 
} 
0

私はあなたがいくつかを見つけると思いますあなたの変数にdidSetを使用する際の値。役に立つ例があります。

class vc: UIViewController { 
    var numpplLabel: UILabel! 
    var tipLabel: UILabel! 

    var numberOfPeople: Double = 0 { 
    didSet { 
     guard oldValue != numberOfPeople else { return } 
     numpplLabel.text = "\(numberOfPeople) ppl" 
    } 
    } 

    var tipPercentage: Double = 0.2 { 
    didSet { 
     guard oldValue != tipPercentage else { return } 
     tipLabel.text = "\(tip)% tip" 
    } 
    } 

    var tip: Double { return tipPercentage*100 } 

    override func viewDidAppear(_ animated: Bool) { 
    super.viewDidAppear(animated) 
    numberOfPeople = defaults.double(forKey: "numberOfPeopleDefault") 
    tipPercentage = defaults.double(forKey: "tipPercentageDefault") 
    } 
} 
関連する問題