设置nil UserDefaults时出现NSInvalidArgumentException

时间:2017-08-12 22:59:29

标签: ios swift nsuserdefaults

我正在使用UserDefaults将值存储到首选项中。

我有一个模板类和一个获取值的方法(需要被覆盖)

func getValue(_ value: T?) -> Any?
{
    return value
}

当我打电话时:

UserDefaults.standard.set(getValue(value), forKey: "pref_key")

其中value可以是nil, 我收到这个错误:

  

由于未捕获的异常而终止应用   'NSInvalidArgumentException',原因:'尝试插入非属性   列表对象为键pref_key'

为null

如果值为nil,是不是应该删除密钥?

1 个答案:

答案 0 :(得分:1)

问题是尝试在NSNull中存储UserDefaults的值。这不受支持。 nil很好,它只是删除任何现有值。但NSNullnil不同。

你需要处理这件事。这是一个解决方案:

var val = getValue(value)
if val is NSNull {
    val = nil
}
UserDefaults.standard.set(val, forKey: "pref_key")