2017-02-04 14 views
0

Я создаю приложение таймера pomodoro, и в настоящее время я пытаюсь реализовать пользовательские значения по умолчанию в слайд-меню (класс Settings), который отвечает за содержание uisliders для настройки длина таймера. По умолчанию пользовательский интерфейс выглядит корректно для меня, но всякий раз, когда я закрываю приложение в симуляторе и снова открываю его, значение не сохраняется? Ползунок и метка возвращаются к значениям по умолчанию. Что я делаю не так?Мои настройки по умолчанию не сохраняют значение моего слайдера - 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', а не 'UIViewController'. Таким образом, его метод 'viewDidLoad()' не вызывается автоматически. Вызовите его явно, когда вы создаете свои «Настройки» или определяете инициализаторы «Настройки» и вызываете 'viewDidLoad()' (имя должно быть изменено ...) изнутри инициализаторов. – OOPer

ответ

0

Вы должны использовать правильную пару методов, чтобы установить и получить значение в UserDefaults

Вы сохраняете значение с defaults.set(sender.value, forKey: durationSlide) который Запоминание Float в UserDefaults.

Но ваша попытка прочитать значение использует неправильный метод. Вы используете value(forKey:), который не является методом UserDefaults. Это от расширения кодирования ключевого значения до NSObject (которое продолжается UserDefaults). Вместо этого используйте:

durationSlide = defaults.float(forKey: durationSlide) 

Это даст значение 0, если нет значения в UserDefaults.

 Смежные вопросы

  • Нет связанных вопросов^_^