我正在编写一些代码来保存用户首选项。

enum CustomSettingsEnum: NSNumber {
    case Off
    case On
}

let someKey = "SOME_KEY"

func getSettings() -> CustomSettingsEnum {
    var cseBool = Bool?
    var cse: CustomSettingsEnum!
    let settingsExists = NSUbiquitousKeyValueStore.defaultStore().boolForKey(self.someKey)
    if settingsExist {
        // Get the NSNumber and convert that to Bool
    } else {
        cse = CustomSettingsEnum.On
    }
    return cse
}

func setSettings(cse: CustomSettingsEnum) {
    NSUbiquitousKeyValueStore.defaultStore().setObject(cse, forKey: self.someKey)
}


我先致电setSettings(),再致电getSettings()
但是在调用getSettings()时,似乎settingsExist中的getSettings()始终为假。为什么会这样呢?这是保存此类信息的最佳方法吗?

最佳答案

抱歉,我误解了boolForKey的功能NSUbiquitousKeyValueStore

boolForKey不会检查该密钥是否存在,
但正在检查该键的值,该键应该是Bool。

所以我这样重写它:
枚举CustomSettingsEnum:NSNumber {
        案例关闭
        案例开
    }

let someKey = "SOME_KEY"

func getSettings() -> CustomSettingsEnum {
    var cseBool = Bool?
    var cse: CustomSettingsEnum!
    let settingsExists = NSUbiquitousKeyValueStore.defaultStore().objectForKey(self.someKey)
    if settingsExist != nil {
        // Get the NSNumber and convert that to Bool
    } else {
        cse = CustomSettingsEnum.On
    }
    return cse
}

10-06 07:19