我有个变数

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/

10-12 01:52