[iOS] required init?(coder: NSCoder) 이게 뭔데 자꾸 만들어줘
1. 뭔데 이건
항상 UIView를 상속받고, 쓰려고 하면 다음과 같이 required init?(coder: NSCoder)를 만들어준다.
class CustomView: UIView {
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
이게 대체 뭐고 왜 필요한지 알아보자.
2. NSCoder?
알기 위해선, 인자로 받고 있는 NSCoder이 무엇인지 먼저 알아야할 필요가 있다.
2023.10.22 - [IOS] - [iOS] NSCoding, 내 마음 속에.. 아니 Data에 저장하고 싶을 때
[iOS] NSCoding, 내 마음 속에.. 아니 Data에 저장하고 싶을 때
1. 저장, 불러오기 앱에서 만들었던 객체들을 Data로 저장하고 다시 불러오고 싶은 경우가 있을 것이다. 이런 경우 사용하는 것이 NSCoding 프로토컬이다. 2. Encode와 Decode NSCoding 프로토컬을 보면 Data
pushedgun.tistory.com
이것에 대해선 위 링크를 참고하자.
즉, required init은 해당 타입을 가진 객체들을 디코딩해주는 method이다.
3. ✅ 커스텀뷰를 코드로 만들었기에 불리면 안되는 것
스토리보드에서 작성한 객체들은 xml 형식으로 저장된다.
그래서 나중에 프로젝트를 열었을 때, 전에 작성되었던 객체들이 그대로 스토리보드에 올라와야 한다.
여기서 xml로 저장할 때, 이 required init?이 불려 xml 파일에 담긴 객체들의 Data를 스토리보드로 불러준다.
그런데 우리가 커스텀한 뷰는 스토리보드가 아닌 코드로 작성했기 때문에 required init이 불리면 안된다.
그래서 불렸을 때, Error을 찍어주도록 fatalError가 포함된 required init을 생성해주는 것이다.