-
NSCoding 쓸 때 does not implement methodSignatureForSelector: 에러가 나는 경우프로그래밍/iOS 2021. 9. 17. 01:15
해결방법
1. 인코딩할 클래스가 NSObject를 상속했는지 확인. 이때 CustomStringConvertible 프로토콜을 사용할 수 없게 됨
2. 클래스의 프로퍼티로 enum을 가지고 있으면 안된다.
(enum 타입을 가지고 있다면 원시형 값으로 치환해서 하던가 해야함)
// // Player.swift // MultiSceneWithUserDefaultTest // // Created by turu on 2021/09/17. // import Foundation class Player: NSObject, NSCoding { enum Gender: String { case man case woman case other } func descriptionToPrint() -> String { return "\(name), \(gender), \(age)" } var name: String var age: Int var gender: String init(name: String, age: Int, gender: Gender) { self.name = name self.age = age self.gender = gender.rawValue } func encode(with aCoder: NSCoder) { print(#function, #line) aCoder.encode(name, forKey: "name") aCoder.encode(age, forKey: "age") aCoder.encode(gender, forKey: "gender") } required init?(coder aDecoder: NSCoder) { print(#function, #line) name = aDecoder.decodeObject(forKey: "name") as! String age = aDecoder.decodeInteger(forKey: "age") gender = aDecoder.decodeObject(forKey: "gender") as! String } }
예시) Player는 생성 할 때는 Gender 타입으로 받지만 gender 프로퍼티를 Gender 타입으로 저장하지 않고 String타입으로 변환해서 저장하게 함
반응형'프로그래밍 > iOS' 카테고리의 다른 글
[iPadOS] iPadOS에서 multiple scene을 구성하기 (0) 2021.09.22 NSCoding, Codable 사용 방법 정리(코드) (0) 2021.09.20 [iOS] navigation bar의 large title를 쓸 때 반투명으로 바꾸는 방법 (0) 2021.08.25 [iOS] scrollViewDidEndScrollingAnimation이 시뮬레이터에서는 호출되지만 디바이스에서 호출되지 않을 때 (0) 2021.03.24 [iOS] hidesSearchBarWhenScrolling가 작동하지 않을 때 (0) 2021.03.13