2011-02-02 5 views
5

나는 전에 보지 못했던 무엇인가를 보았고 나는 그 원인을 확인하기 위해 여기서 물어볼 것이라고 생각했다. 나는 UIController 누구의 programatically 정의 된, 오늘은 그 loadView 및 viewDidLoad 두 번 모두 4 번 호출 된 loadView (다른 뭔가를 테스트하려면) 코드를 주석 것으로 나타났습니다. 내 생각에 view 속성을 설정하지 않았기 때문에 iOS는 view를로드하기 위해 여러 번 시도하고 있습니다. 그래도 viewDidLoad도 호출 된 경우 이것이 조금 궁금 해서요.view 속성이 설정되지 않은 경우 loadView가 여러 번 호출 되었습니까?

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

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

콘솔 출력 :

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

나는 또한 사람들은 실제로 같은 MapController – nduplessis

답변

1

을있는 viewDidLoad에서 코드를 넣고 언급. 첫째로, 나는 당신의 가정이 옳다고 생각한다. 뷰를 요구하는 것이 무엇이든 되돌아 오는 것이기 때문에 View Controller의 뷰를 다시 요청한다. 이로 인해 documentation for UIViewController-view에 대해 설명 된대로 -loadView을 통과합니다.

나중에 -viewDidLoad이 호출되는 이유는 뷰를로드하지 않았기 때문입니다. 나는 -loadView이 호출되는 곳에서 뷰가로드되었고 이후에 곧바로 -viewDidLoad을 호출한다고 가정합니다.

어느 방법이든 -loadView을 구현하는 경우 끝에는 유효한보기가 있어야합니다.

2

가에는 loadView 방법

내가 여기에 두 지점이 있다고 생각
+0

에서오고 있는지 확인하기 위해 그에는 loadView에서 자체 로그 것 코드의 주석을 제거 할 때 제대로 작동하지만 무슨 일인지 궁금했습니다. loadView는 * .xib를 사용하지 않기 때문에 뷰 항목을 만드는 데 적합한 장소 인 것 같습니다. – fuzzygoat

+0

뷰가 현재로드되어 있지 않으면 self.view 속성 접근자가 -loadView를 호출합니다. 무한 재귀가 발생할 수 있습니다. – iHS

9

추가 [슈퍼에는 loadView]을에는 loadView 메소드의 시작 부분에

+0

감사합니다. loadView는 내비게이션 컨트롤러를 통해 뷰를 떠날 때 8 번과 3 번 호출되었습니다. 이제는 모두 좋다. – tazboy

+7

문서에 따르면'[super loadView] '라고 부르지 말아야한다. – user102008

+0

문서에서 loadView를 직접 호출하지 않는다고 말한다. 그것은 super.loadView를 호출하지 않는다고 말하지 않았습니다. – Boon

1

loadView 귀하의 재정 self.view에 뷰를 할당해야합니다. https://developer.apple.com/documentation/uikit/uiviewcontroller/1621454-loadview

에서

문서 당
- (void)loadView 
{ 
    self.view = [UIView new]; 
} 

당신은 수동으로 뷰를 생성하기 위해이 메소드를 오버라이드 (override) 할 수 있습니다. 이렇게하려면보기 계층 구조의 루트보기를 보기 속성에 할당하십시오. 생성 한 뷰는 고유 한 인스턴스 여야하며 다른 뷰 컨트롤러 객체와 공유하면 안됩니다. 이 메서드를 사용자 지정 구현하면 super를 호출해서는 안됩니다.

아마도 여러 장소는 깊은 UIKit에서이 같은 일이 호출되는 경우가 있습니다

if (viewController.view == nil) { 
    [viewController loadView]; 
} 
관련 문제