我有一个变量
var pausedTime: TimeInterval?我想用NSSecureCoding来编码和解码它
到目前为止,我有这样的编码:
aCoder.encode(pausedTime, forKey: "Pause")这是用来解码的,把TimeInterval看作是一个Double
if aDecoder.containsValue(forKey: "Pause") {
pausedTime = aDecoder.decodeDouble(forKey: "Pause")
}但这是不起作用的,并导致错误:
错误错误:多线程fetch * -NSKeyedUnarchiver decodeDoubleForKey::value for key (pausedTime)期间引发的异常不是64位浮点数({ "__NSCoderInternalErrorCode“= 4864;})
请有人给我提供正确的方法来保护TimeInterval的编码/解码。
发布于 2018-11-07 16:08:53
首先,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")https://stackoverflow.com/questions/53193223
复制相似问题