2017-01-07 1 views
-2

스위프트 3에 넣으려고하는 다음 코드가 있습니다. super.encodeWithCoder(aCoder) 줄 문제가 있습니다. 내가하는 것은 무엇이든 오류를 준다. 내가 스위프트 3스위프트 3의 인코딩

로 변환하기 위해 노력하고있어

import Foundation 
class ToDo: Task { 
var done: Bool 

@objc required init(coder aDecoder: NSCoder) { 
    self.done = aDecoder.decodeObjectForKey("done") as! Bool 
    super.init(coder: aDecoder) 
} 

@objc override func encodeWithCoder(aCoder: NSCoder) { 
    aCoder.encodeObject(done, forKey: "done") 
    super.encodeWithCoder(aCoder) 
} 

init(name: String, done: Bool) { 
    self.done = done 
    super.init(name: name) 
} 
} 

나는이

import Foundation 

class ToDo: Task { 
var done: Bool 

@objc required init(coder aDecoder: NSCoder) { 
    self.done = aDecoder.decodeObject(forKey: "done") as! Bool 
    super.init(coder: aDecoder) 
} 

@objc override func encode(with aCoder: NSCoder) { 
    aCoder.encode(done, forKey: "done") 
    // THis line gives an error 
    super.encode(with aCoder) 

} 

init(name: String, done: Bool) { 
    self.done = done 
    super.init(name: name) 
} 

} 

라인 super.encodeWithCoder(aCoder) 오류를 제공합니다. Swift는 아무런 메시지도 표시하지 않고 검색 결과가 없습니다. 의견 원래 코드 "super.encodeWithCoder (aCoder)"에 응답

편집에는 멤버 (aCoder와) 'encodeWithCoder'

super.encode이없는 유형 '작업'의 오류 값 오류 예상 부여합니다 제공 ';' 구분 기호

+1

오류가 무엇입니까 :

올바른 기능 수익률에 코드를 변경? – shallowThought

+0

이상한 코딩이긴하지만, 나는 이것을 무시하는 것에 익숙하지 않기 때문에 가능성이 높다. 나는 항상 IB에서 만들어진 뷰만 init (코더 :)를 사용한다고 생각했다. 즉, 두 가지가 나에게 뛰어 들었습니다. (1) 당신은 어떤 종류의 오류에 관한 세부 사항을 게시하지 않았습니다. (2) super.ecode (with : coder)를 호출하기 전에 일부 코드가 있기 때문에 빌드 오류가 발생할 수 있습니다. 보너스 : 방금 코드에 콜론이 누락 된 것을 보았습니다. 확실히 구축하지 않을 것이라고 확신합니다. – dfd

+0

"'super.encodeWithCoder (aCoder)'줄에 오류가 있습니다." 그 선은 당신의 Swift 3 예제에는 존재하지 않습니다. 'super.encode (withCoder)'에 대한 호출이 컴파일에 실패했다는 것을 의미합니까? dfd가 가리키는 것처럼,'super.encode (with : aCoder)'가되어야하기 때문에 컴파일되지 않습니다. – Rob

답변

0

나는 응용 프로그램이 충돌하는 이유는 Bool에 decodeObject() 함수를 사용한다는 것입니다.

@objc required init(coder aDecoder: NSCoder) { 
    super.init(coder: aDecoder) 
    self.done = aDecoder.decodeBool(forKey: "done") 
} 

@objc override func encode(with aCoder: NSCoder) { 
aCoder.encode(done, forKey: "done") 
} 
+0

이 작동하지만 super.init (coder : aDecoder)를 추가하여 오류 메시지가 표시되지 않도록하십시오. – cpmac

+0

그에 따라 대답이 잘못되었습니다. Havent 그것을 사용하지 않는 오류가 있었다 O :) – Emptyless

관련 문제