2013-02-18 7 views
12

走ります[self configureView]が2回呼び出されます。しかし:メソッドがヒットし方法は不可解私は詳細ビューコントローラに次のコードを持って二回

  • どちらの回は、スタックは次のようになります。

stack

  • 私は上記のコードで[self configureView]をコメントすると、それがゼロ回を打っています。
  • スタックが両方とも同じであることから明らかなように、-configureViewはそれ自身を再帰的に呼び出すことはありません。
  • -configureViewは、上記のコードでのみ呼び出されます。
+0

したがって、 'viewWillLayoutSubviews'は2回呼び出されますか?それでは、あなたのビューコントローラーの再レイアウトを引き起こしているのは何ですか? – abellina

+0

ええ、良い点。問題は、 '-viewWillLayoutSubviews'がなぜ二度呼び出されるのかということです。スタック上で全く同じ方法で。 –

答えて

1

通常のパターンに従うと、configureViewはdetailItemのsetterで呼び出されます。設定メソッドを確認してください。 [detailViewController setDetailItem:something]は、よくprepareForSegue:で呼び出されます。

重要な点は次のとおりです。重要ですか? Apple's documentationから

+1

ビューがレイアウトされているときはいつでもモデルから値を更新したいので、 '-viewWillLayoutSubviews'で呼びます。セッターで呼び出すと、より構造的には意味がありますが、セグの前にビューが更新されずに失効したデータが表示されます。とにかくはい、それは最も重要なことです!一つは、その行動を理解したいのです。また、この方法で集中的に操作したい場合はどうすればよいでしょうか?なぜ2回実行する必要がありますか? –

+1

私はあなたがセッターからそれを呼び出さなければならないと言っていませんでした。私はちょうどあなたが実際にセッターからそれを呼び出すかもしれないというヒントを与えたいと思います。それで全部です。しかし、私はこれがモデルからデータをリフレッシュするのに適切な場所であるとは確信していません。 viewWillAppearはその目的には十分でなければなりません。 –

+0

ありがとうヘルマン!私はここでレポートを見ていきます。私はKnuth氏(http://c2.com/cgi/wiki?PrematureOptimization)の「プログラムの重要ではない部分のスピードを考えたり、心配したりするために、プログラマーが膨大な時間を費やすことを考えています。 。私は、これらすべてのメソッドがどのようにランタイムに組み込まれているかを理解しているかどうかを確認しようとしています。 'viewWillAppear'を指摘してくれてありがとう –

11

:ビューのサイズが変更とその親によって位置決めされた後

viewWillLayoutSubviews方法も呼ばれています。

viewWillLayoutSubviewsは、コントローラのビューのたびbounds変更と呼ばれて考えると、それは一度だけ呼び出されますという保証はありません。たとえば、回転が発生するたびに呼び出されます。

あなたconfigureView方法はHermann's suggestionあたりとしておそらくviewWillAppearviewDidAppearまたはBirdDetail項目についても、カスタムミューテータに、おそらくより良いどこか別の場所から呼び出されます。

関連する問題