UIViewController의 하위 클래스에 대한 사용자 지정 초기화를 작성하는 데 문제가 있습니다. 기본적으로 속성을 직접 설정하는 대신 viewController의 init 메서드를 통해 종속성을 전달하고 싶습니다. viewControllerB.property = value
그래서 내 viewController에 대한 사용자 정의 초기화를 만들고 슈퍼 지정 초기화를 호출했습니다.
init(meme: Meme?) {
self.meme = meme
super.init(nibName: nil, bundle: nil)
}
뷰 컨트롤러 인터페이스는 스토리 보드에 있으며 사용자 지정 클래스의 인터페이스도 뷰 컨트롤러로 만들었습니다. 그리고 Swift는이 메소드 내에서 아무것도하지 않더라도이 init 메소드를 호출해야합니다. 그렇지 않으면 컴파일러가 불평합니다 ...
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
문제는 MyViewController(meme: meme)
내 viewController에서 속성을 초기화하지 않는 사용자 지정 초기화를 호출하려고 할 때입니다 .
디버깅을 시도하고 있었는데, viewController에서 발견하고 init(coder aDecoder: NSCoder)
먼저 호출 한 다음 나중에 사용자 지정 초기화를 호출했습니다. 그러나이 두 init 메서드는 다른 self
메모리 주소를 반환 합니다.
내 viewController의 init에 문제가 있다고 의심되며 항상 구현이없는으로 반환 self
됩니다 init?(coder aDecoder: NSCoder)
.
누구든지 viewController에 대한 사용자 정의 초기화를 올바르게 만드는 방법을 알고 있습니까? 참고 : 내 viewController의 인터페이스는 스토리 보드에 설정되어 있습니다.
다음은 내 viewController 코드입니다.
class MemeDetailVC : UIViewController {
var meme : Meme!
@IBOutlet weak var editedImage: UIImageView!
// TODO: incorrect init
init(meme: Meme?) {
self.meme = meme
super.init(nibName: nil, bundle: nil)
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
override func viewDidLoad() {
/// setup nav title
title = "Detail Meme"
super.viewDidLoad()
}
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
editedImage = UIImageView(image: meme.editedImage)
}
}