gpt4 book ai didi

swift - 在 Swift 中从存档中解码对象时出现 NSInvalidUnarchiveOperationException 错误

转载 作者:行者123 更新时间:2023-11-28 06:51:33 31 4
gpt4 key购买 nike

请注意,我是 Swift 和 iOS 编程的新手,所以你们中的一些人可能会觉得这有点傻。

无论如何,我正在编码一个 Int 对象并将它与一个 String 键相关联,如下所示:

func encodeWithCoder(aCoder: NSCoder) {
// Note that `rating` is an Int
aCoder.encodeObject(rating, forKey: PropertyKey.ratingKey)

}

现在当我尝试像这样解码它时:

required convenience init?(coder aDecoder: NSCoder) {
let rating = aDecoder.decodeIntegerForKey(PropertyKey.ratingKey)

// Initialising a model class
self.init(rating: rating)
}

常量 rating 应该是 Int 因为 decodeIntegerForKey 默认返回 Int

构建进展顺利,但是当我运行它时它崩溃了,并记录了如下复制的错误。

Terminating app due to uncaught exception 
'NSInvalidUnarchiveOperationException',
reason: '*** -[NSKeyedUnarchiver decodeInt64ForKey:]:
value for key (rating) is not an integer number'

但是当我将 decodeIntegerForKey 更改为 decodeObjectForKey 并将返回值向下转换为 Int.

像这样:

required convenience init?(coder aDecoder: NSCoder) {
// Replaced `decodeInteger` with `decodeObject` and downcasting the return value to Int
let rating = aDecoder.decodeObjectForKey(PropertyKey.ratingKey) as! Int
self.init(rating: rating)
}

我越来越难以理解为什么会出现异常,因为我将其编码为 Int 并且 decodeInteger 默认返回 Int。

另外,我觉得 NSInvalidUnarchiveOperationException 告诉我我使用了错误的操作来解码编码对象。

这对我来说没有任何意义,帮助

最佳答案

这个问题已经解决了。感谢@PhillipMills 的澄清。

编码 Int 对象时执行错误。我在 AnyObject 而不是 Int 中对其进行编码,并试图将其解码为 Int。这就是为什么我不得不向下转换它并且解码为 Int 不起作用的原因。

编码应该是这样完成的:

func encodeWithCoder(aCoder: NSCoder) {
// Note that `rating` is an Int
aCoder.encodeInteger(rating, forKey: PropertyKey.ratingKey)

}

关于swift - 在 Swift 中从存档中解码对象时出现 NSInvalidUnarchiveOperationException 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34752229/

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