gpt4 book ai didi

iOS Swift 你如何安全编码/解码时间间隔以与 NSSecureCoding 兼容?

转载 作者:行者123 更新时间:2023-11-28 11:43:16 26 4
gpt4 key购买 nike

我有一个变量

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; })

有人可以为我提供正确的方法来安全地编码/解码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 Swift 你如何安全编码/解码时间间隔以与 NSSecureCoding 兼容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53193223/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com