2013-06-25 2 views
0

문제가 있습니다.iOS6이 viewdidload 전에 개인 메소드를 호출하는 이유는 무엇입니까?

컨트롤러를 처음 사용할 때 initwithnib:bundle: 메서드를 사용한 다음이 컨트롤러가 메모리에로드되었다고 생각합니다. 그래서 나는 그 메소드를 selectUnreadMessage이라고 부르며 그 헤더를 변경합니다. 그러나 selectUnreadMessage 이후에 viewdidload이 호출 된 것을 발견했습니다.

왜 저에게 말할 수 있습니까? 감사.

- (void)selectUnreadSegmentedHeaderButton { 

    if ([YDNetworkingManager sharedNetworkingManager].badgeNumbers.count) { 

     for (NSNumber *unreadMessagesCount in [YDNetworkingManager sharedNetworkingManager].badgeNumbers) { 
      if (unreadMessagesCount.intValue > 0) { 
       NSInteger index = [[YDNetworkingManager sharedNetworkingManager].badgeNumbers indexOfObject:unreadMessagesCount]; 
       self.segmentedHeader.selectedIndex = index; 
       [self loadTableViewAtIndex:index]; 
       break; 
      } 
     } 
    } 
} 

내 개인적인 방법의 코드는 위와 같습니다. 이 컨트롤러에는 SegmentedHeader 속성이있어 여러 종류의 메시지를 전환 할 수 있습니다.

이 메서드는이 메서드를 addSubView로 사용한 컨트롤러 이후에 호출됩니다.

+2

자신보다 더 잘 설명 할 수있는 경우가 아니면 말입니다. 그러나 뷰는 뷰에 대한 첫 번째 참조에서 만들어 짐을 명심하십시오. selectUnreadMessage가 뷰를 참조하면 뷰가로드됩니다. –

+0

하지만 initwithnib : bundle : 메서드를 호출 할 때 컨트롤러에 대한 참조를 올바르게 처리 했습니까? –

+0

initWithNib는 컨트롤러를 참조하지만 뷰는 참조하지 않습니다. –

답변

0

viewDidLoad 컨트롤러보기가 addSubView이 될 준비가되면 다른보기로 호출됩니다. 컨트롤러 뷰를 추가하면 viewWillAppearviewDidAppear이 호출됩니다. 컨트롤러보기가 수퍼 뷰에서 제거되면 viewWillDisAppearviewDidDisAppear이 호출됩니다.

컨트롤러보기가 다시 추가됩니다. viewDidLoad이 표시됩니다. 다른 방법은 내가 말했던 것과 똑같을 것이다.

처음 컨트롤러를 사용할 때 viewDidLoad이 즉시 호출되지 않았 음을 의미합니다. 이 메서드는 나중에 호출됩니다. 그것은 게으름 로딩

희망 유용합니다!

+0

감사하지만 ViewDidLoad 전에 정의 된 메서드를 호출 할 수있는 이유를 말해 줄 수 있습니까? 그래서 "selectUnreadMessage"라는 메소드가 호출되면 iOS가 ViewDidLoad를 호출하게 되었습니까? –

+0

private 메소드를 호출하지 않으면'viewDidLoad'가 호출 되었습니까? 'viewDidLoad'는 컨트롤러에 대한 뷰를 볼 수있는 경우에만 호출됩니다. 개인적인 방법의 코드를 보여줄 수 있습니까? – VietHung

+0

OK, 위의 개인 메서드 코드를 붙여 넣습니다. –

0

ViewController 초기화가 뷰를 만들지 않습니다. 뷰 컨트롤러가 뷰가 실제로 뷰 계층에 추가 될 때 뷰가 지연로드되어로드됩니다. 따라서 -viewDidLoad 메서드는 viewcontroller의 .view 속성에 액세스 할 때 호출됩니다. 따라서 -viewDidLoad이 호출되면 init 메서드 (데이터 가져 오기, 컨테이너 할당, ​​기본값 설정 등)에서 데이터 구조를 초기화하고 나중에 적용 할 수 있습니다 데이터를 조회수/사용자 인터페이스에 추가하십시오.

관련 문제