2013-02-18 5 views
12

çalışır [self configureView] iki kez çağrılır. Ancak: yöntem isabetYöntem açıklanamaz ben bir ayrıntı görünümü denetleyicisi aşağıdaki kodu var iki kez

  • İki kere yığını gibi görünür:

stack

  • Yukarıdaki kodda [self configureView] açıklama, bu sıfır kez vuruldu.
  • Yığın her ikisi de aynı olduğu için, -configureView kendini yinelemeli olarak çağırmaz. Yukarıdaki kodda yalnızca
  • -configureView belirtilmiştir.
+0

Yani 'viewWillLayoutSubviews' iki kez çağrılıyor? Öyleyse soru, kontrolörünüzde yeniden düzenleme yapmanın tetiklediği şey nedir? – abellina

+0

Evet, iyi nokta. Soru şu ki, '-viewWillLayoutSubviews' iki kez aranıyor. Yığında aynı şekilde. –

cevap

1

Normal kalıpları izlerseniz, configureView öğesi detailItem ayarlayıcısında çağrılır. Setter metodunu kontrol edin. Ve [detailViewController setDetailItem:something] genellikle prepareForSegue: içinde çağrılır.

Anahtar nokta şudur: fark eder mi? Apple's documentation kaynaktan

+1

Bunu -viewWillLayoutSubviews' olarak adlandırıyorum çünkü değerlerin görünümler her zaman düzenlendiğinde modelden güncellenmesini istiyorum. Setterde çağırmak daha yapısal bir anlam ifade eder, ancak eski bir veri sunumuyla sonuçlanan görüşlerin bir segue'den önce güncellenmemesine yol açar. Her neyse evet, kesinlikle çok önemli gibi görünüyor! Bir şey için, davranışını anlamak isterim. Ayrıca, bu yöntemde yoğun bir işlem yapmak istesem ne olur? Neden iki kez yürütmeli? –

+1

Onu diziden çağırmanız gerektiğini söylemedim. Sadece onu iki katı olarak adlandırılmasına neden olacak şekilde dizgeden de çağıracağınıza dair ipucu vermek istiyorum. Bu kadar. Bununla birlikte, bunun verilerin modelden yenilenmesi için uygun bir yer olduğuna ikna olmadım. viewWillAppear bu amaç için yeterli olmalıdır. –

+0

Teşekkürler Hermann! Burada bir göz atacağım. Knuth (http://c2.com/cgi/wiki?PrematureOptimization) tarafından "Programcıların programlarının kritik olmayan bölümlerinin hızını düşünerek veya endişe ederek çok fazla zaman harcadıkları" alıntılarını nasıl düşündüğümü düşünüyorum. .Tüm bu yöntemlerin çalışma zamanına nasıl bağlı olduğunu anladığımdan emin olmaya çalışıyorum. ViewWillAppear'ı işaretlediğiniz için teşekkürler –

11

: görünüşüdür yeniden boyutlandırılmış ve ebeveyn tarafından konumlandırıldıktan sonra

viewWillLayoutSubviews yöntemi olarak da adlandırılır. kontrolörün görünümde bounds değişim, bir zamanlar sadece çağrılır olacak hiçbir garantisi yoktur her viewWillLayoutSubviews Verilen

denir. Örneğin, dönüş gerçekleştiğinde çağrılır.

Sizin configureView yöntem muhtemelen daha iyi, belki viewWillAppear yılında, başka bir yerden viewDidAppear denilen veya Hermann's suggestion uyarınca BirdDetail öğe için bile özel bir Mutator edilir.