Ich habe nach diesem Fehler gesucht und verschiedene Stackoverflow, Apple-Dokumentation und Blog-Antworten lesen, aber ich habe immer noch Probleme. Ich habe eine Klasse, die NSData und NSCoding entspricht, für die 3 von 6 Eigenschaften gespeichert werden. Beim Aufruf von self.init in der erforderlichen Bequemlichkeit init, erhalte ich einen Fehler "Extra Argument 'groomedStatus' im Aufruf", obwohl die self.init Signatur init genau übereinstimmt (ich kopierte und eingefügt). Dies ist der entsprechende Code:Extra Argument im Aufruf in 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")
}
}
Ich bin mir nicht sicher? Dies ist ein Compiler-Fehler. Daher habe ich die App nicht aus dem Simulator deinstalliert und neu installiert. Aus diesem Grund habe ich Command B mehrmals versucht, sie nach den Änderungen zu erstellen. – Eddy
Ah, das war nur etwas Dummes, das ich versuchte, weil mir die Ideen ausgegangen sind. Ich werde es wieder auf das Original ändern. – Eddy
Die Fehlermeldung ist ein bisschen irreführend. Das Problem ist die verschachtelte 'init' Definition in der' init (coder ... 'Methode. Das kann überhaupt nicht funktionieren. Zum Beispiel müssen Sie eine echte Zeichenfolge für' name' übergeben, nicht den Typ 'String'. – vadian