2016-06-04 20 views
0

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") 
} 

}

+0

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

+0

Ah, das war nur etwas Dummes, das ich versuchte, weil mir die Ideen ausgegangen sind. Ich werde es wieder auf das Original ändern. – Eddy

+1

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

Antwort

1

Das Problem ergibt sich aus, wie Sie self.init() nennen. Die Art, wie Sie es in Ihrem Code tun, ist im Wesentlichen ein Versuch, es neu zu definieren, was für den Compiler keinen Sinn ergibt. So sollten Sie self.init() in Ihrem Initialisierer aufrufen.

self.init(name: "yourActualNameString", difficulty: Difficulty(), haveSkied: true, season: .winter, open: "yourActualOpenString", groomedStatus: "yourActualGroomedStatusString") 
+0

Das habe gearbeitet, danke! Ich habe jede Eigenschaft der Klasse mit encodeObject gespeichert und mit decodeObjectForKey die tatsächlichen Werte an self.init übergeben. – Eddy