设置 nil UserDefaults 时出现 NSInvalidArgumentException
NSInvalidArgumentException when setting nil UserDefaults
我正在使用 UserDefaults
将值存储到首选项中。
我有一个模板 class 和一个获取值的方法(需要被覆盖)
func getValue(_ value: T?) -> Any?
{
return value
}
当我打电话时:
UserDefaults.standard.set(getValue(value), forKey: "pref_key")
其中 value
可以是 nil
,
我收到此错误:
Terminating app due to uncaught exception
'NSInvalidArgumentException', reason: 'Attempt to insert non-property
list object null for key pref_key'
如果值为 nil,难道不应该删除密钥吗?
问题是试图在 UserDefaults
中存储值 NSNull
。这不受支持。 nil
很好,它只是删除任何现有值。但是 NSNull
与 nil
不同。
你需要处理这件事。这是一种解决方案:
var val = getValue(value)
if val is NSNull {
val = nil
}
UserDefaults.standard.set(val, forKey: "pref_key")
我正在使用 UserDefaults
将值存储到首选项中。
我有一个模板 class 和一个获取值的方法(需要被覆盖)
func getValue(_ value: T?) -> Any?
{
return value
}
当我打电话时:
UserDefaults.standard.set(getValue(value), forKey: "pref_key")
其中 value
可以是 nil
,
我收到此错误:
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Attempt to insert non-property list object null for key pref_key'
如果值为 nil,难道不应该删除密钥吗?
问题是试图在 UserDefaults
中存储值 NSNull
。这不受支持。 nil
很好,它只是删除任何现有值。但是 NSNull
与 nil
不同。
你需要处理这件事。这是一种解决方案:
var val = getValue(value)
if val is NSNull {
val = nil
}
UserDefaults.standard.set(val, forKey: "pref_key")