iOS Swift 您如何保护 Encode/Decode TimeInterval 以与 NSSecureCoding 兼容?
iOS Swift How do you Secure Encode/Decode a TimeInterval for compatibility with NSSecureCoding?
我有一个变量
var pausedTime: TimeInterval?
我想用NSSecureCoding
对其进行编码和解码
到目前为止我有这个用于编码:
aCoder.encode(pausedTime, forKey: "Pause")
这用于解码,将 TimeInterval
视为 Double
:
if aDecoder.containsValue(forKey: "Pause") {
pausedTime = aDecoder.decodeDouble(forKey: "Pause")
}
但这不起作用并导致错误:
[error] fault: exception raised during multi-threaded fetch ***
-[NSKeyedUnarchiver decodeDoubleForKey:]: value for key (pausedTime) is not a 64-bit float ({
"__NSCoderInternalErrorCode" = 4864; })
有人可以向我提供 正确的 方法来保护 encode/decode 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")
我有一个变量
var pausedTime: TimeInterval?
我想用NSSecureCoding
到目前为止我有这个用于编码:
aCoder.encode(pausedTime, forKey: "Pause")
这用于解码,将 TimeInterval
视为 Double
:
if aDecoder.containsValue(forKey: "Pause") {
pausedTime = aDecoder.decodeDouble(forKey: "Pause")
}
但这不起作用并导致错误:
[error] fault: exception raised during multi-threaded fetch *** -[NSKeyedUnarchiver decodeDoubleForKey:]: value for key (pausedTime) is not a 64-bit float ({ "__NSCoderInternalErrorCode" = 4864; })
有人可以向我提供 正确的 方法来保护 encode/decode 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")