我有一个变量
var pausedTime: TimeInterval?
我想用NSSecureCoding
进行编码和解码
到目前为止,我有这个用于编码:
aCoder.encode(pausedTime, forKey: "Pause")
并将其用于解码,将TimeInterval
视为Double
:
if aDecoder.containsValue(forKey: "Pause") {
pausedTime = aDecoder.decodeDouble(forKey: "Pause")
}
但这无法正常工作并导致错误:
[错误]错误:多线程访存期间引发异常*** -[NSKeyedUnarchiver encodeDoubleForKey:]:密钥(pausedTime)的值不是64位浮点数({ “ __NSCoderInternalErrorCode” = 4864; })
请问有人可以为我提供正确的方法来保护TimeInterval
的编码/解码吗?
答案 0 :(得分:2)
首先,TimeInterval
恰好是Double
(它只是一种类型别名)。如果您希望对TimeInterval
有什么特殊性,这很有用。没有。
在您的情况下,pausedTime
不是TimeInterval
。这是TimeInterval?
。您可能最终会调用encode(Any?, forKey:)
重载,而这可能会将您的double装箱到NSNumber
中。
要解决此问题,您应该确保要编码Double
。例如:
if let pausedTime = pausedTime {
aCoder.encode(pausedTime, forKey: "Pause")
}
或
aCoder.encode(pausedTime ?? 0.0, forKey: "Pause")