나는이 오류를 찾고 다양한 stackoverflow, Apple 설명서 및 블로그 응답을 읽었지만 여전히 문제가 있습니다. NSData 및 NSCoding을 준수하는 클래스가 6 개 중 3 개가 저장됩니다. 필요한 편의 init에서 self.init를 호출 할 때 self.init 서명이 init과 정확하게 일치하더라도 ("복사 및 붙여 넣기") "여분의 인수 'groomedStatus'가 호출됩니다.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 (coder ...') 메소드에서 중첩 된'init' 정의입니다. 전혀 작동하지 않습니다. 예를 들어'String' 타입이 아닌'name'을위한 실제 문자열을 전달해야합니다. – vadian