UIViewControllerのサブクラスのカスタムinitの記述に問題があります。基本的に、プロパティを直接設定するのではなく、viewControllerのinitメソッドを介して依存関係を渡したいです。 viewControllerB.property = value
そこで、viewControllerのカスタムinitを作成し、スーパー指定のinitを呼び出しました。
init(meme: Meme?) {
self.meme = meme
super.init(nibName: nil, bundle: nil)
}
ビューコントローラーインターフェイスはストーリーボードにあります。カスタムクラスのインターフェイスもビューコントローラーにしました。また、このメソッド内で何もしていない場合でも、Swiftはこのinitメソッドを呼び出す必要があります。そうでなければ、コンパイラは文句を言うでしょう...
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
問題は、カスタムinitを呼び出そうとするとMyViewController(meme: meme)
、viewControllerのプロパティがまったく初期化されないことです...
私はデバッグしようとしていましたが、viewControllerでinit(coder aDecoder: NSCoder)
最初に呼び出され、次にカスタムinitが後で呼び出されました。ただし、これら2つのinitメソッドは異なるself
メモリアドレスを返します。
私は自分のViewControllerのためのinitで何かを間違っを疑っていて、それが常に返されますself
とinit?(coder aDecoder: NSCoder)
、何の実装を持ちません、。
viewControllerのカスタムinitを正しく作成する方法を知っている人はいますか?注:私の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)
}
}