Я искал эту ошибку и читал различные файлы stackoverflow, документацию Apple и ответы в блогах, но у меня все еще возникают проблемы. У меня есть класс, соответствующий NSData и NSCoding, для которого будет сохранено 3 из 6 свойств. Когда вы вызываете self.init в требуемом удобстве init, я получаю сообщение об ошибке «Дополнительный аргумент« groomedStatus »в вызове», даже если подпись self.init соответствует init точно (я скопировал и вставил). Это соответствующий код:Дополнительный аргумент в вызове self.init Swift 2.2
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")
}
}
Я не уверен? Это ошибка компилятора, поэтому я не удалял и не переустанавливал приложение из симулятора, и я попробовал команду B, чтобы создать ее несколько раз после внесения изменений. – Eddy
Ах, это было что-то глупое, что я пытался, потому что у меня кончились идеи. Я вернусь к оригиналу. – Eddy
Сообщение об ошибке немного вводит в заблуждение. Проблема заключается в вложенном определении 'init' в' init (coder ... 'method. Это не может работать вообще. Например, вы должны передать реальную строку для' name', а не типа 'String'. – vadian