我正在尝试将一个对象保存到 NSUserdefaults
,然后提取相同的对象。
// let raw: AnyObject! = defaults.valueForKey("testKey")
// let data = raw as NSData
//
// self.Report = NSKeyedUnarchiver.unarchiveObjectWithData(data) as DayReport
//
// println(Report.Day)
Report.Day = "Mon"
let data = NSKeyedArchiver.archivedDataWithRootObject(self.Report)
println(data)
defaults.setObject(data, forKey: "testKey")
defaults.synchronize()
在这段代码中,我将对象 Report 保存到编码为 NSData
的 NSUserDefaults
中。 DayReport
是 Report
但是当我切换注释部分,使代码的上半部分没有注释而下半部分有注释时,let var = (nil)
并且程序崩溃了。 为什么?
DayReport
具有 NSCoding
协议(protocol)。
更新
我添加了这个:
defaults.setObject(data, forKey: "testKey")
defaults.synchronize()
println(defaults.objectForKey("testKey"))
它打印出nil,所以它没有被正确保存,但数据不为零。
最佳答案
您不应该使用 .valueForKey("testKey")
,因为这是使用 KVC 来尝试获取不存在的 key 。
相反,您应该使用 .objectForKey("testKey")
。
关于ios - NSUserDefaults 返回 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25077621/