我试图将对象保存到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保存为NSUserDefaults编码的NSDataDayReportReport的类型

但是,当我切换注释部分时,代码的上部不被注释,而下部是注释,因此let var = (nil)和程序崩溃。 为什么?
DayReport具有NSCoding协议。

更新资料

我添加了这个:
    defaults.setObject(data, forKey: "testKey")
    defaults.synchronize()

    println(defaults.objectForKey("testKey"))

并且它打印出nil,因此无法正确保存它,但是数据不是nil。

最佳答案

您不应该使用.valueForKey("testKey"),因为这是使用KVC尝试获取不存在的密钥的。

相反,您应该使用.objectForKey("testKey")

关于ios - NSUserDefaults返回nil,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25077621/

10-12 00:23
查看更多