Не извиквате synchronize()
след настройка на обекта:
let userDefaults = NSUserDefaults.standardUserDefaults()
userDefaults.setObject(itemSelected, forKey: "colourChosen")
userDefaults.synchronize()
^^^^
Без това никаква промяна не се записва веднага. Това може да е причината.
synchronize
трябва да се извиква всеки път, когато правите промени в потребителските настройки по подразбиране и искате незабавно да запазите промените (системата автоматично го извиква на определени интервали от време).
Въпреки това във вашата реализация viewWillAppear
забелязвам, че използвате принудително разгръщане, което винаги трябва да избягвате, освен ако не сте 100% сигурни, че незадължителното действително съдържа стойност, различна от нула. Бих защитил това разопаковане с незадължително обвързване:
if let colour = NSUserDefaults.standardUserDefaults().stringForKey("colourChosen") {
itemSelected = color
}
Актуализация
Забелязвам, че itemSelected
е временен контейнер за това, което съхранявате в потребителските настройки по подразбиране. Може да помислите за преместване на потребителския код по подразбиране в изчислено свойство, за да предотвратите дублиране на код всеки път, когато това свойство се чете или променя - нещо като:
private var _itemSelected : String?
var itemSelected : String? {
get {
if _itemSelected == nil {
_itemSelected = NSUserDefaults.standardUserDefaults().stringForKey("colourChosen")
}
return _itemSelected
}
set {
let userDefaults = NSUserDefaults.standardUserDefaults()
userDefaults.setObject(newValue, forKey: "colourChosen")
userDefaults.synchronize()
}
}
където _itemSelected
е просто кеширана стойност - или подобна реализация, но без кешираната стойност:
var itemSelected : String? {
get {
return NSUserDefaults.standardUserDefaults().stringForKey("colourChosen")
}
set {
let userDefaults = NSUserDefaults.standardUserDefaults()
userDefaults.setObject(newValue, forKey: "colourChosen")
userDefaults.synchronize()
}
}
Имайте предвид, че и в двата случая типът свойство е незадължителен низ
person
Antonio
schedule
18.11.2014