【发布时间】:2016-06-04 15:34:22
【问题描述】:
我一直在寻找这个错误并阅读各种 stackoverflow、Apple 文档和博客答案,但我仍然遇到问题。我有一个符合 NSData 和 NSCoding 的类,将存储 6 个属性中的 3 个。在所需的便利 init 中调用 self.init 时,我收到错误“调用中的额外参数 'groomedStatus'”,即使 self.init 签名与 init 完全匹配(我复制并粘贴)。这是相关代码:
class Trail: NSObject, NSCoding {
var name: String
var difficulty: Difficulty
var haveSkied: Bool
var season: Season = .winter
var open: String?
var groomedStatus: String?
init(name: String, difficulty: Difficulty, haveSkied: Bool, season: Season, open: String?, groomedStatus: String?) {
self.name = name
self.difficulty = difficulty
self.haveSkied = haveSkied
self.season = season
self.open = open
self.groomedStatus = groomedStatus
}
required convenience init(coder aDecoder: NSCoder) {
let haveSkied = aDecoder.decodeObjectForKey("haveSkied") as! Bool
let open = aDecoder.decodeObjectForKey("open") as? String
let groomedStatus = aDecoder.decodeObjectForKey("groomedStatus") as? String
self.init(name: String, difficulty: Difficulty, haveSkied: Bool, season: Season, open: String?, groomedStatus: String?) {
self.name = name
self.difficulty = difficulty
self.haveSkied = haveSkied
self.season = season
self.open = open
self.groomedStatus = groomedStatus
}
func encodeWithCoder(aCoder: NSCoder) {
aCoder.encodeBool(haveSkied, forKey: "haveSkied")
aCoder.encodeObject(open, forKey: "open")
aCoder.encodeObject(groomedStatus, forKey: "groomedStatus")
}
}
【问题讨论】:
-
我不确定?这是一个编译器错误,所以我没有从模拟器中卸载并重新安装应用程序,并且我在更改后尝试了几次Command B构建它。
-
啊,这只是我尝试的一些愚蠢的事情,因为我已经没有想法了。我会把它改回原来的。
-
错误信息有点误导。问题在于
init(coder...方法中的嵌套init定义。那根本行不通。例如,您必须为name传递一个真实的字符串,而不是String类型。