2017-02-04 9 views
0

私はポモドーロのタイマーアプリを作成していますが、調整のためのuisliderを含む責任を負うスライドアップメニュー(Settingsクラス)​​にユーザーデフォルトを実装しようとしています。タイマーの長さユーザーのデフォルトは私にとってはかなり正しいように見えますが、シミュレータでアプリケーションを終了して再度開くと値が保存されません。スライダとラベルの両方がデフォルト値に戻ります。私は何を間違えているのですか?私のユーザーのデフォルトではスライダーの値が保存されません - Swift 3

import Foundation 
import UIKit 

class Settings: UIView { 

let defaults = UserDefaults.standard 

let durationSlide = "durationSlide" 


@IBOutlet weak var durationSlider: UISlider! 
@IBOutlet weak var durationLabel: UILabel! 

func viewDidLoad() { 

    if let durationSlide = defaults.value(forKey: durationSlide) { 
     durationSlider.value = durationSlide as! Float 
     durationSliderValueChanged(durationSlider) 
    } 


} 


@IBAction func durationSliderValueChanged(_ sender: UISlider) { 
    let currentValue = Int(sender.value) 
    durationLabel.text = "\(currentValue) minutes" 
    defaults.set(sender.value, forKey: durationSlide) 
} 
+1

'defaults.float(forKey:durationSlide)'を使用します。 – Paulw11

+0

'Settings'クラスは' UIView'としてではなく、 'UIView'として実装されています。したがって、そのメソッド 'viewDidLoad()'は自動的に呼び出されません。 'Settings'をインスタンス化するときに明示的に呼び出すか、' Settings'の初期化子を定義し、初期化子の内部から 'viewDidLoad()'(名前を変更する必要があります)を呼び出します。 – OOPer

答えて

0

あなたがUserDefaultsFloatを保存しているdefaults.set(sender.value, forKey: durationSlide)で値を保存しているUserDefaults

であなたの値を設定および取得するメソッドの適切なペアを使用する必要があります。

しかし、値を読み取ろうとして間違った方法を使用しています。 UserDefaultsの方法ではないvalue(forKey:)を使用しています。キー値のコード拡張からNSObjectUserDefaultsまで)です。代わりに、使用:UserDefaultsに値がない場合

durationSlide = defaults.float(forKey: durationSlide) 

これは0の値が得られます。

関連する問題