首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS Swift如何确保与NSSecureCoding兼容的TimeInterval编码/解码?

iOS Swift如何确保与NSSecureCoding兼容的TimeInterval编码/解码?
EN

Stack Overflow用户
提问于 2018-11-07 16:02:05
回答 1查看 369关注 0票数 0

我有一个变量

代码语言:javascript
复制
var pausedTime: TimeInterval?

我想用NSSecureCoding来编码和解码它

到目前为止,我有这样的编码:

代码语言:javascript
复制
aCoder.encode(pausedTime, forKey: "Pause")

这是用来解码的,把TimeInterval看作是一个Double

代码语言:javascript
复制
if aDecoder.containsValue(forKey: "Pause") {
    pausedTime = aDecoder.decodeDouble(forKey: "Pause")
}

但这是不起作用的,并导致错误:

错误错误:多线程fetch * -NSKeyedUnarchiver decodeDoubleForKey::value for key (pausedTime)期间引发的异常不是64位浮点数({ "__NSCoderInternalErrorCode“= 4864;})

请有人给我提供正确的方法来保护TimeInterval的编码/解码。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-07 16:08:53

首先,TimeInterval正是一个Double (它只是一个类型)。如果您期望TimeInterval有任何特殊之处,这一点很有用。根本就没有。

但是,在您的例子中,pausedTime不是TimeInterval。这是一个TimeInterval?。您可能正在结束调用encode(Any?, forKey:)重载,这可能是将您的双份装箱到一个NSNumber中。

要解决这个问题,您应该确保您正在编码一个Double。例如:

代码语言:javascript
复制
if let pausedTime = pausedTime {
   aCoder.encode(pausedTime, forKey: "Pause")
}

代码语言:javascript
复制
aCoder.encode(pausedTime ?? 0.0, forKey: "Pause")
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53193223

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档