iOS Swift您如何安全编码/解码TimeInterval以与NSSecureCoding兼容?

时间:2018-11-07 16:02:05

标签: ios swift core-data nssecurecoding

我有一个变量

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的编码/解码吗?

1 个答案:

答案 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")