6

その動作を決定するプロパティを持つView Controllerがあります。これらは の親によって設定されprepareForSegueます。

これが私のプログラムに引き起こす潜在的なバグは、問題の親がプロパティを設定することが保証されていないことです。そのため、デフォルト値を設定したいと考えています。調査の結果、Objective C のプロパティにはデフォルト値がないことがわかりました。これにより、次のオプションが残りました。

  • 子ビューのviewDidLoadメソッドでプロパティのデフォルト値を設定します。ただし、調査では、親で後でviewDidLoad呼び出されるため、親が実際にプロパティを設定するときに、親の値を上書きします。 prepareForSegue
  • 次に、値を初期化するために使用できると考え(id) initましたが、少なくともストーリーボードを使用する場合、このメソッドはまったく呼び出されません!

オブジェクトがデフォルト値に初期化されるという回避策があるかもしれませんが、この場合、渡したいのは BOOL だけです。また、ブール値は正しく初期化されていなくても値を持つため、非 nil かどうかをテストすることはできません。

prepareForSegue親の前に子View Controllerの値を初期化する機会はありますか?

4

1 に答える 1

7

オブジェクトinitの指定された初期化子ではないため、オーバーライドは役に立ちません。UIViewControllerView Controller を手動でインスタンス化する- (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundleと、ストーリーボードから読み込まれたとき- (id)initWithCoder:(NSCoder *)decoderに呼び出されます。ビュー コントローラーの初期化時にプロパティを設定する場合は、両方の初期化子をオーバーライドする必要があります。

調査の結果、Objective C のプロパティにはデフォルト値がないことがわかりました。

彼らはそうします。nilオブジェクト、0整数値、0.0浮動小数点など。それ以外のデフォルト値が必要な場合は、適切な init メソッドで設定する必要があります。

于 2013-10-31T02:37:56.450 に答える