2016-06-04 5 views
0

Я искал эту ошибку и читал различные файлы 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") 
} 

}

+0

Я не уверен? Это ошибка компилятора, поэтому я не удалял и не переустанавливал приложение из симулятора, и я попробовал команду B, чтобы создать ее несколько раз после внесения изменений. – Eddy

+0

Ах, это было что-то глупое, что я пытался, потому что у меня кончились идеи. Я вернусь к оригиналу. – Eddy

+1

Сообщение об ошибке немного вводит в заблуждение. Проблема заключается в вложенном определении 'init' в' init (coder ... 'method. Это не может работать вообще. Например, вы должны передать реальную строку для' name', а не типа 'String'. – vadian

ответ

1

Проблема результатов от того, как вы называете self.init(). То, как вы делаете это в своем коде, - это, по сути, попытка переопределить его, что не имеет смысла для компилятора. Вот как вы должны звонить self.init() в удобном для вас инициализаторе.

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

работал, спасибо! Я сохранил каждое свойство класса с помощью encodeObject и использовал decodeObjectForKey для передачи фактических значений self.init. – Eddy