Fatal error: init(coder:) has not been implemented in Swfit
2455 단어 iOS 개발 예외 처리iOSSwiftFatalerror
1. 개요
평소 개발에서 UIVIew에 계승된 하위 클래스를 만들려면 잘못하면'Fatal error: init(coder:)has not been implemented'라는 붕괴 알림이 나타납니다. 오늘 본고는 이 붕괴 해결 방안을 여기에 기록합니다.
우리가 개발하는 과정에서 UIVIew의 하위 클래스를 자주 사용자 정의하여 일부 UI 구성 요소 등을 봉인할 수 있지만, 사용할 때 우리는 다음과 같은 두 가지 방법으로 이 클래스의 실례를 만들 수 있다.
2. 일반 코드 생성
첫 번째 방식으로 만들면 사용자 정의 클래스에서 init(frame: CGRect) 방법을 실현하고 이 방법에서 슈퍼 방법을 호출해야 합니다. 그러나 이 init(frame: CGRect) 방법이 실현되면 Xcode가 즉시 오류를 보고하고 우리가 한 가지 방법을 더 실현해야 한다고 알려줍니다. 그것이 required init입니까?(coder: NSCoder) 메서드, 그렇지 않으면 컴파일이 통과할 수 없습니다.
두 가지 방법이 모두 실현된 후에 컴파일이 통과되었습니다. 이때 우리는 init(frame: CGRect) 실현 방법에서 UI를 설정하는 방법을 호출할 수 있습니다.참조 예는 다음과 같습니다.class ReflectionView: UIView {
override init(frame: CGRect) {
super.init(frame: frame)
setUp()
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func setUp() {
// UI
}
}
3. xib 만들기
위의 순수 코드 생성 실례는 왜 required init를 강제로 요구합니까?(coder: NSCoder) 방법은?이 방법은xib를 통해 실례를 만들 때 시스템이 호출하는 방법이기 때문에 애플은 서로 다른 실례를 고려할 수 있기 때문에 UIVIew를 계승하는 하위 클래스에서 필요한 모든 초기화 방법을 요구한다.
그러니까 저희가 required init를 더 필요로 한다고요?(coder: NSCoder) 방법을 개선하고fatalError 알림을 없애고 슈퍼 호출 방법을 추가합니다.예제 코드는 다음과 같습니다.class ReflectionView: UIView {
override init(frame: CGRect) {
super.init(frame: frame)
setUp()
}
required init?(coder: NSCoder) {
super.init(coder: coder)
setUp()
}
func setUp() {
// UI
}
}
이런 글쓰기는 두 가지 방식으로 UIVIew에 계승된 하위 클래스를 만드는 데 만족한다.
또한 사용자 정의 클래스는 순수한 코드 생성이 필요하지 않고 xib를 통해 만들 수 있다. 그러면 우리는 위의 두 가지 초기화 방법을 실현하지 않고 awakeFromNib() 방법을 실현할 수 있다.class ReflectionView: UIView {
override func awakeFromNib() {
super.awakeFromNib()
setUp()
}
func setUp() {
// UI
}
}
4. 요약
본고는 주로 UIVIew에 계승된 하위 클래스를 만드는 초기화 방법의 사용을 설명하고 실수로 발생할 수 있는 Fatal error: init(coder:)has not been implemented 오류 알림을 피하는 방법을 설명한다.우리가 만든 클래스를 더욱 유연하게 하기 위해서, 두 가지 초기화 방법으로 하나의 클래스를 구축하는 것을 권장합니다.
글은 좀 간단하지만 인상을 깊게 하고 자신이 다시는 실수를 범하지 않도록 하는 동시에 필요한 사람에게 도움을 줄 수 있기를 바라며 기록할 필요가 있다.
위의 내용이 정확하지 않으면 지나가는 친구에게 지적해 주십시오. 감사합니다!
이 문장은https://blog.csdn.net/guoyongming925의 블로그를 전재하려면 출처를 명시해 주십시오.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
stripe-ios에서 신용 카드 정보의 ZIP을 숨기고 싶습니다.
stripe-ios란 신용카드로 결제하는 iOS 앱을 만들 때,
필수라고 해도 과언이 아닌 훌륭한 SDK입니다.
※stripe-ios github 페이지에서.
단지 현재, 신용 카드의 정보로서 입력하는 항목이,
번호...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
class ReflectionView: UIView {
override init(frame: CGRect) {
super.init(frame: frame)
setUp()
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func setUp() {
// UI
}
}
위의 순수 코드 생성 실례는 왜 required init를 강제로 요구합니까?(coder: NSCoder) 방법은?이 방법은xib를 통해 실례를 만들 때 시스템이 호출하는 방법이기 때문에 애플은 서로 다른 실례를 고려할 수 있기 때문에 UIVIew를 계승하는 하위 클래스에서 필요한 모든 초기화 방법을 요구한다.
그러니까 저희가 required init를 더 필요로 한다고요?(coder: NSCoder) 방법을 개선하고fatalError 알림을 없애고 슈퍼 호출 방법을 추가합니다.예제 코드는 다음과 같습니다.
class ReflectionView: UIView {
override init(frame: CGRect) {
super.init(frame: frame)
setUp()
}
required init?(coder: NSCoder) {
super.init(coder: coder)
setUp()
}
func setUp() {
// UI
}
}
이런 글쓰기는 두 가지 방식으로 UIVIew에 계승된 하위 클래스를 만드는 데 만족한다.
또한 사용자 정의 클래스는 순수한 코드 생성이 필요하지 않고 xib를 통해 만들 수 있다. 그러면 우리는 위의 두 가지 초기화 방법을 실현하지 않고 awakeFromNib() 방법을 실현할 수 있다.
class ReflectionView: UIView {
override func awakeFromNib() {
super.awakeFromNib()
setUp()
}
func setUp() {
// UI
}
}
4. 요약
본고는 주로 UIVIew에 계승된 하위 클래스를 만드는 초기화 방법의 사용을 설명하고 실수로 발생할 수 있는 Fatal error: init(coder:)has not been implemented 오류 알림을 피하는 방법을 설명한다.우리가 만든 클래스를 더욱 유연하게 하기 위해서, 두 가지 초기화 방법으로 하나의 클래스를 구축하는 것을 권장합니다.
글은 좀 간단하지만 인상을 깊게 하고 자신이 다시는 실수를 범하지 않도록 하는 동시에 필요한 사람에게 도움을 줄 수 있기를 바라며 기록할 필요가 있다.
위의 내용이 정확하지 않으면 지나가는 친구에게 지적해 주십시오. 감사합니다!
이 문장은https://blog.csdn.net/guoyongming925의 블로그를 전재하려면 출처를 명시해 주십시오.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
stripe-ios에서 신용 카드 정보의 ZIP을 숨기고 싶습니다.
stripe-ios란 신용카드로 결제하는 iOS 앱을 만들 때,
필수라고 해도 과언이 아닌 훌륭한 SDK입니다.
※stripe-ios github 페이지에서.
단지 현재, 신용 카드의 정보로서 입력하는 항목이,
번호...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
stripe-ios에서 신용 카드 정보의 ZIP을 숨기고 싶습니다.stripe-ios란 신용카드로 결제하는 iOS 앱을 만들 때, 필수라고 해도 과언이 아닌 훌륭한 SDK입니다. ※stripe-ios github 페이지에서. 단지 현재, 신용 카드의 정보로서 입력하는 항목이, 번호...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.