ストーリーボードで設計されたCustomViewControllerの初期化メソッドのオーバーライドに問題があります。
今私がやっている(私のmainViewControllerで):
_self.customViewController = [[UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil] instantiateViewControllerWithIdentifier:@"CustomVC"];
self.customViewController.myObject = someObject;
_
そして私はviewDidLoad(CustomViewController)にあります
_ [self.label setText:self.myObject.someString];
_
これで問題ありません。
しかし、それは正しい方法ですか? CustomViewControllerにカスタムinitメソッドを追加(またはオーバーライド)する必要がありますか? initWithObjectのように:? _UIStoryboard instantiateViewControllerWithIdentifier:
_の代わりにカスタムinitメソッドを呼び出す方法がわからず、init
もinitWithNibName
の呼び出しも取得できません。
たぶん私は使用する必要があります:- (id)initWithCoder:(NSCoder *)decoder
。
アドバイスをください!
ありがとうございました!
ストーリーボードのView Controllerに指定された初期化子は-initWithCoder:
。ストーリーボードのほとんどのView Controllerはセグエ経由で作成されるため、通常、-prepareForSegue:sender:
。
指定した例のように、ストーリーボードから直接View Controllerをインスタンス化する場合は、選択したパターンが適切です。
この問題の別の「回避策」として、委任を使用できます。ストーリーボードからUIViewControllerサブクラスのデータソースとして機能するプロトコルを作成します。このデータソースプロトコルに準拠して実装し、UIViewControllerサブクラスを読み込んだ直後に使用します。
required init?(coder aDecoder: NSCoder)
{
super.init(coder: aDecoder)
//invoke your data source here
}
私も知っています...私もこれが好きではありませんが...;)