2011-02-02 13 views
5

Daha önce görmediğim bir şeye rastladım ve nedenini doğrulamak için buraya geleceğimi düşündüm. Görünümün programatik olarak tanımlandığı bir UIController sahibiyim. Bugün, loadView ve viewDidLoad öğelerinin her ikisinin de dört kez çağrıldığı loadView (başka birşeyi test etmek için) yorumunu yaptığımda fark ettim. Benim düşüncem şu ki, iOS özelliği görüntüyü yüklemek için birden çok kez denediğim için view özelliğini ayarlamamış olmama rağmen, yine de biraz da meraklıyım, eğer bu durum viewDidLoad'un neden çağrıldığını da merak ediyor.loadView, özellik görüntülenmiyorsa birden çok kez çağırıldı mı?

- (void)loadView { 
    NSLog(@"%s", __PRETTY_FUNCTION__); 

    // MAP VIEW 
    // MKMapView *tempMapView = [[MKMapView alloc] init]; 
    // [tempMapView setDelegate:self]; 
    // [self setView:tempMapView]; 
    // [self setCustomMapView:tempMapView]; 
    // [tempMapView release]; 
} 

Konsol çıkışı:

2011-02-02 14:10:00.194 Xrails[19501:307] -[MapController loadView] 
2011-02-02 14:10:00.209 Xrails[19501:307] -[MapController viewDidLoad] 

2011-02-02 14:10:00.212 Xrails[19501:307] -[MapController loadView] 
2011-02-02 14:10:00.226 Xrails[19501:307] -[MapController viewDidLoad] 

2011-02-02 14:10:00.229 Xrails[19501:307] -[MapController loadView] 
2011-02-02 14:10:00.243 Xrails[19501:307] -[MapController viewDidLoad] 

2011-02-02 14:10:00.246 Xrails[19501:307] -[MapController loadView] 
2011-02-02 14:10:00.259 Xrails[19501:307] -[MapController viewDidLoad] 
+0

Ben de bu gerçekten aynı MapController – nduplessis

cevap

1

viewDidLoad kodunuzu koyun ve yorum. Öncelikle, varsayımın doğru olduğunu düşünüyorum, çünkü görüş için çağrı ne olursa olsun geri dönüyor ve görüş kontrolörünün görüşünü yeniden soruyor. Bu, documentation for UIViewController'da -view için belgelendiği gibi -loadView'dan geçmesine neden olur.

-viewDidLoad neden görüntülendiyse, görüntüyü yüklememiş olsa da; -loadView'un çağrıldığını gördüğümde, görünümün yüklendiğini ve -viewDidLoad'u daha sonra çağırdığını düşünmekteyim.

Her iki durumda da, -loadView uygularsanız, bunun sonunda geçerli bir görünümünüz olması gerekir.

2

loadView yöntemini

Burada iki nokta var olduğunu düşünüyorum
+0

geldiğini emin olmak için bu loadView içinde kendini log ediyorum Kodu rahatsız ettiğimde iyi çalışıyor, ne olup bittiğini merak ediyordum. loadView, ben kullanmadığım için görünüm öğeleri oluşturmak için doğru bir yer gibi görünecektir. * .xib – fuzzygoat

+0

Görünüm şu anda yüklü değilse self.view özellik erişimci -loadView çağırır. Sonsuz yinelemeniz gerçekleşebilir. – iHS

9

Ekleme [süper loadView] loadView yöntemin başında

+0

Teşekkürler. viewView bir navigasyon denetleyicisi aracılığıyla bıraktığımda 8 kez ve 3 kez çağrılıyordu. Şimdi her şey yolunda. – tazboy

+7

belgelerine göre '' [super loadView] '' dırılmaması gereken '' – user102008

+0

'' Dokümantasyonda loadView doğrudan arama yapmıyor diyor. Super.loadView çağırmayın demedim. – Boon

1

loadView Sizin geçersiz kılma self.view için bir görünüm atamanız gerekir. https://developer.apple.com/documentation/uikit/uiviewcontroller/1621454-loadview

de

docs Başına
- (void)loadView 
{ 
    self.view = [UIView new]; 
} 

manuel görünümleri oluşturmak için bu yöntemi geçersiz kılabilir. Bunu yapmayı seçerseniz, görünüm hiyerarşinizin kök görünümünü görünüm özelliğine atayın. Oluşturduğunuz görünümler benzersiz örnek olmalı ve başka bir denetleyici denetleyicisi nesnesiyle paylaşılmamalıdır. Bu yöntemin özel uygulamanız süper çağrı yapmamalıdır.

Tahminen birkaç yer derinlerde UIKit böyle bir şey çağrılan nerede vardır:

if (viewController.view == nil) { 
    [viewController loadView]; 
} 
İlgili konular