나의 플랫폼/iOS
[iOS] initWithCoder unrecognized selector sent to instance
GsBOB
2017. 10. 17. 10:55
Model을 만들어 사용할 때 아래 와 같은 에러가 나올 경우,
[ModelVO initWithCoder:]: unrecognized selector sent to instance
한번 에러 나는 모델 소스가 아래와 같이 되어 있는지 확인 바란다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | import Foundation class ModelVO : NSObject { var num: Int var title: String init(qno: Int, question: String, answered: Int){ self.num = qno self.title = question self.answered = answered } required init(coder aDecoder: NSCoder) { self.num = aDecoder.decodeInteger(forKey: "num") self.title = aDecoder.decodeObject(forKey: "title") as! String } func encodeWithCoder(_ aCoder: NSCoder!) { aCoder.encode(self.num, forKey: "num") aCoder.encode(self.question, forKey: "title") } } | cs |
위 소스에서 문제점은 encodedWithCoder 이다.
NSCoding을 상속 받고, encode 함수를 오바라이딩 받습니다.
그럼 소스가 아래와 같이 변경이 됩니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | import Foundation class ModelVO : NSObject, NSCoding { var num: Int var title: String init(qno: Int, question: String, answered: Int){ self.num = qno self.title = question self.answered = answered } required init(coder aDecoder: NSCoder) { self.num = aDecoder.decodeInteger(forKey: "num") self.title = aDecoder.decodeObject(forKey: "title") as! String } func encode(with aCoder: NSCoder) { aCoder.encode(self.num, forKey: "num") aCoder.encode(self.title, forKey: "title") } } | cs |
아카이빙을 항상 NSObject 와 NSCoding을 함께 쓴다고 생각 하면 될 듯 하다.
참고하세요.