我有个变数
var pausedTime: TimeInterval?
我想用
NSSecureCoding
对其进行编码和解码到目前为止,我有这个编码:
aCoder.encode(pausedTime, forKey: "Pause")
对于解码,将
TimeInterval
视为Double
:if aDecoder.containsValue(forKey: "Pause") {
pausedTime = aDecoder.decodeDouble(forKey: "Pause")
}
但这不起作用并导致错误:
[错误]错误:多线程获取期间引发异常***
-[NSKeyedUnarchiver decodeDoubleForKey:]:键(pausedTime)的值不是64位浮点值({
“\u nscoderinternalerrocode”=4864;})
请有人给我提供一个正确的方式来安全编码/解码一个
TimeInterval
? 最佳答案
首先,TimeInterval
完全是一个Double
(它只是一个类型别名)。如果您对TimeInterval
有任何特殊要求,这一点很有用。没有。
但是,在您的情况下,pausedTime
不是一个TimeInterval
。这是一个TimeInterval?
。你可能正在结束调用encode(Any?, forKey:)
过载,这可能是把你的两倍装箱到NSNumber
。
要解决这个问题,您应该确保您正在编码一个Double
。例如:
if let pausedTime = pausedTime {
aCoder.encode(pausedTime, forKey: "Pause")
}
或
aCoder.encode(pausedTime ?? 0.0, forKey: "Pause")
关于ios - iOS Swift您如何安全编码/解码TimeInterval以与NSSecureCoding兼容?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53193223/