let startDayTime = aDecoder.decodeObject(forKey: Key.startDayTime) as! Int
它在Xcode 7.3中的Swift 2.2中运行正常.有没有人面临这样的麻烦?
附:我在模拟器和设备上都有这个错误.
更新:我使用decodeInteger(forKey key:String)而不是decodeObject(forKey key:String)解决了这个问题.由于某种原因,AnyObject在Swift 3中不会转换为Integer,尽管它在Swift 2.2中
看起来,只有当Swift 2中的NSKeyedArchiver存档的NSData blob与Swift 3中的NSKeyedUnarchiver打开时,才会在Swift 2至Swift 3更新边界上进行.我猜测,在Swift 2中,Bool和Int被编码为NSNumber,但在Swift 3中,它们被编码为原始Bool和Int类型.我相信以下测试支持这一说法:这在Swift 3中可以解压缩Swift 2编码的Bool,但如果Bool在Swift 3中编码,则返回零:
let visible = aDecoder.decodeObject(forKey: "visible") as? Bool
这在Swift 3中起作用,以解冻Swift 3编码的Bool,但如果Bool在Swift 2中编码,则会崩溃:
let visible = aDecoder.decodeBool(forKey: "visible")
我的解决办法是:
let visible = aDecoder.decodeObject(forKey: "visible") as? Bool ?? aDecoder.decodeBool(forKey: "visible")总结
以上是内存溢出为你收集整理的swift3 – NSKeyedArchiver在Swift 3(XCode 8)中不起作用全部内容,希望文章能够帮你解决swift3 – NSKeyedArchiver在Swift 3(XCode 8)中不起作用所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)