2015-10-05 26 views
0

我有一个UIPickerView可让用户更改国家设置。NSUserDefaults对象在执行委托方法后没有进入

func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 
    let defaults = NSUserDefaults.standardUserDefaults() 
    defaults.setObject(countries[row], forKey: "SelectedCountry") 
    let test = defaults.stringForKey("SelectedCountry") 
    delegate?.countryChanged() 
} 

这个test变量得到正确的值。

然而,当委托方法countryChanged叫我得到一个错误:

fatal error: unexpectedly found nil while unwrapping an Optional value 

这是代码:

func countryChanged() { 
    let defaults = NSUserDefaults.standardUserDefaults() 
    countryLabel.text = defaults.stringForKey("SelectedCountry") 
} 

的价值怎么能是零?这是调用委托方法之前的正确国家,并且没有修改此值的代码。

+0

能否请您分享您的sameple项目? – Max

+0

您应该确保'countries [row]'实际上包含一个'String'。 –

+0

FUNC countryChanged(){ 让默认= NSUserDefaults.standardUserDefaults() 如果让文本= defaults.stringForKey( “SELECTEDCOUNTRY”){ countryLabel?的.text =文本 } } – Lukas

回答

-1

你必须坚持你的修改NSUserDefaults的:

func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 
    let defaults = NSUserDefaults.standardUserDefaults() 
    defaults.setObject(countries[row], forKey: "SelectedCountry") 
    defaults.synchronize() // must call synchronize here to save your modifications 
    let test = defaults.stringForKey("SelectedCountry") 
    delegate?.countryChanged() 
} 
+1

'不需要synchronize'并且不有助于反映应用程序内的变化。 –

相关问题