프로그래밍/iOS
NSCoding 쓸 때 does not implement methodSignatureForSelector: 에러가 나는 경우
turu
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타입으로 변환해서 저장하게 함
반응형