2013-05-24 2 views
0

해고되지 않습니다 SubViewController 내부아이폰 OS의 viewDidLoad는 내가보기에 하위 뷰를 걸었 내 응용 프로그램에서

subViewController = [[SubViewController alloc] init]; 
NSArray *nibContents = [[NSBundle mainBundle] loadNibNamed:@"SubView" owner:subViewViewController options:nil]; 
UIView *view = [nibContents objectAtIndex:0]; 
view.frame = CGRectMake(2, 0, myView.frame.size.width - 4, myView.frame.size.height); 
[myView addSubview:view]; 

그러나 viewDidLoad 해고되지 않습니다.

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    NSLog(@"ViewDidLoad"); 
} 

IB에서 나는 SubViewController로 파일 소유자 설정 : 여기

는 코드입니다. 문제가 어디 있는지 모르겠습니다. 어떤 아이디어? 고맙습니다.

+0

subViewController = [[SubViewController ALLOC]을 초기화] 이는 viewDidLoad가 호출되어 문제를 해결하지 못하는 라인이지만 시작하기에 좋은 장소입니다. D –

+1

이것은 사실이 아닙니다. viewDidLoad는 초기화시 호출되지 않습니다. 뷰가 처음 액세스되거나 사용될 때 호출됩니다. – drewag

+0

IIRC, 단순히'view' 속성에 접근하면 뷰가 강제로로드됩니다. –

답변

2

은 강제로 코드를 실행하지 않기 때문에 호출되지 않습니다. 보기 컨트롤러의보기는 lazy loaded입니다. subViewController.view을 사용하여 액세스하거나 무언가를하려고하면 뷰가 생성되므로 컨트롤러의 viewDidLoad가 호출됩니다.

0

다른보기에 UIViewController보기를 추가하면 "활성화"되지 않고 viewDidLoad, viewDidAppear, viewDidDisappear 등을 수신하지 않게됩니다.

내가 이런 짓을 했을까 :

subViewController = [[SubViewController alloc] initWithNibName:@"SubView" bundle:nil]; 
subViewController.view.frame = CGRectMake(2, 0, myView.frame.size.width - 4, myView.frame.size.height); 
[self addChildViewController:subViewController]; 
[self.view addSubview:subViewController.view]; 
[subViewController didMoveToParentViewController:self]; 
+1

코드가 작동하지만 설명이 약간 벗어났습니다. 보기가 게으른로드됩니다. 뷰 컨트롤러에서 액세스 될 때 즉시로드되고 viewDidLoad는 즉시 호출됩니다. 그래서 코드에서 두 번째 줄에서 일어날 것입니다. – drewag

+0

사실이지만 이것은 (viewWillAppear, viewDidAppear, ...) 호출되지 않은 다른 콜백과 관련된 향후 문제도 해결할 것입니다. –

+0

동의합니다. 나는 그들이 문제의 진정한 본질을 이해하고 있는지, 그리고 코드를 먹여서 문제가 마술처럼 해결되는지를 확인하기를 원한다. – drewag

관련 문제