我在打开我的应用时加载了一些NSUserDefaults值,在第一次成功的会话之后它运行良好,但问题是它是第一次在新设备中打开。它试图找到我以前从未填写或声明过的值。我尝试使用以下if条件修复它,但它仍然不起作用:
if NSUserDefaults.standardUserDefaults().objectForKey("defaultSessionUserID")! as? String == nil{
但仍向我报告同样的错误:
致命错误:在解包可选值时意外发现nil
是不是因为这条线我只检查对象的密钥而不是密钥?有没有办法检查值是否是之前创建的?
这里是完整的代码:
if NSUserDefaults.standardUserDefaults().objectForKey("defaultSessionUserID")! as? String == nil{
NSUserDefaults.standardUserDefaults().setObject("", forKey: "defaultSessionUserID")
NSUserDefaults.standardUserDefaults().setObject(false, forKey: "KML")
}
if NSUserDefaults.standardUserDefaults().objectForKey("KML")! as? Bool == false{
//Do something
}
else{
//Do something else
}}
由于
答案 0 :(得分:0)
要检查键和值类型,请使用可选绑定
if let defaultSessionUserID = NSUserDefaults.standardUserDefaults().objectForKey("defaultSessionUserID") as? String {
// key and value exists
}
您可以注册默认值(例如,在applicationDidFinishLaunching
)
let defaults = NSUserDefaults.standardUserDefaults()
let defaultValues = ["defaultSessionUserID" : "", "KML" : false]
defaults.registerDefaults(defaultValues)
然后你可以安全地写
let defaultSessionUserID = NSUserDefaults.standardUserDefaults().stringForKey("defaultSessionUserID")!
请注意NSUserDefaults
有专门的方法stringForKey
和boolForKey