0

我有一个变量

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 位浮点数 ({ "__NSCoderInternalErrorCode" = 4864; })

请有人可以为我提供保护编码/解码的正确TimeInterval方法吗?

4

1 回答 1

2

首先,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")
于 2018-11-07T16:08:53.950 回答