【问题标题】:NSUserDefaults returning nilNSUserDefaults 返回 nil
【发布时间】:2014-08-01 21:43:07
【问题描述】:

我试图将一个对象保存到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()

在这段代码中,我将对象报告保存为NSUserDefaults,编码为NSDataDayReportReport 的类型

但是当我切换注释部分时,代码的上部没有注释而下部是,let var = (nil) 和程序崩溃。 为什么?

DayReport 具有NSCoding 协议。

更新

我添加了这个:

    defaults.setObject(data, forKey: "testKey")
    defaults.synchronize()

    println(defaults.objectForKey("testKey"))

它打印出 nil,所以它没有被正确保存但数据不是 nil。

【问题讨论】:

  • 你能告诉我们你设置“defaults”变量的代码行吗?
  • 让默认值 = NSUserDefaults.standardUserDefaults()
  • 只是一个想法,将每个"testKey" 替换为"testKey" as NSString 并检查一下。有用吗?

标签: ios swift nsuserdefaults


【解决方案1】:

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

您应该使用.objectForKey("testKey")

【讨论】:

  • objectForKey() 给出完全相同的结果,我已经尝试过。
  • 你遇到同样的崩溃?给出异常消息和堆栈跟踪。调试并记录用户默认值的全部内容 - 该密钥包含什么?
  • 我现在检查了一些,它甚至没有保存
  • 对象的编码 NSData 不是 nil,但是当我保存它时,它默认返回 nil。
  • 数据有多大?你在设备上运行吗?它有多少可用磁盘空间?您可以将短字符串保存为默认值吗?您需要围绕这个问题进行一些调试...
【解决方案2】:

这里是设置值到 NSuserDefaults 的代码...

 [[NSUserDefaults standardUserDefaults] setInteger:1  forKey:@"your key"];//Remember your key to get data from NSuserDefaults
[[NSUserDefaults standardUserDefaults] synchronize];

从 NSuserDefaults 获取值的代码...

  int CheckTimer = [[NSUserDefaults standardUserDefaults] integerForKey:@"your key"];

希望对你有帮助....

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多