2009-11-26 6 views
1

을 설정하지, 나는 다음과 같은 실행 오전 : TVController가있는 UITableViewController입니다아이폰있는 NSString 값이있는 UIViewController의 내부


TVController* stopTimes = [ [ TVController alloc ] initWithStyle: UITableViewStyleGrouped ]; 
stopTimes.tableView.frame = CGRectMake(0, 180, 320, 280); 
stopTimes.tableView.backgroundColor = [ UIColor whiteColor ]; 
stopTimes.theID = stopID; 
[ self.view addSubview: stopTimes.tableView ]; 

.

TVController 클래스 내에서 합성 된 theID라는 NSString 속성이 있습니다. 위에서 'stopTimes.theID = stopID'를 수행 할 때 오류가 발생하지 않으며 TableView가 예상대로 나타납니다.

이 TVController 클래스의 'viewDidLoad'에서 NSLog 'theID'를 사용하여 작동했음을 보여 주려고 시도하지만 실제로 무엇을 하든지 (null)입니다.

그러나 셀의 텍스트를 'theID'로 설정하려고했는데 정상적으로 작동했습니다.

그렇다면 왜 theID는 셀을 설정할 때 제대로 설정되었지만 viewDidLoad에서는 설정되지 않았습니까?

+0

어떻게 stopID를 초기화하나요? –

답변

1

viewDidLoad는 NIB 또는 loadView 구현에서 뷰가로드 된 직후에 호출됩니다. 보기 컨트롤러가 할당 된 시점이나 나중에 시점이 아닌보기 제어기의보기 등록 정보에 처음 액세스 할 때보기가로드됩니다.

이것은 뷰 컨트롤러의 tableView 속성에 액세스하고 있기 때문에 loadView (사용자의 NIB가있는 경우 기본 구현이있는 경우)와 두 번째 줄에서 viewDidLoad가 처음 호출된다는 것을 의미합니다. 뷰 컨트롤러의 theID 속성에 대한 값을 실제로 설정하기 전에 과정이 발생합니다. 물론 테이블 내용이로드 될 때까지 (다른 위치에서 -reloadContent를 호출하지 않으면 테이블보기가 실제로 나타날 때까지 발생하지 않음) theID 속성이 설정되었습니다.

디버거에 두 개의 중단 점을 설정하여이 테스트를 쉽게 수행 할 수 있습니다. 하나는 theID 속성을 설정 한 위의 코드 조각 세 번째 줄에 하나, 다른 하나는 viewDidLoad에서 NSLog() 호출에 대한 것입니다. 후자의 중단 점이 먼저 트리거됨을 알 수 있습니다.

P. 스택 오버플로에 오신 것을 환영합니다! FAQ를 읽고 질문에 대해 허용 된 답변을 표시하는 것을 잊지 마십시오 (물론 받아 들일 가치가있는 좋은 대답 인 경우).

+0

환상적인 답변! 나는 이제 문제를 해결했다. 그렇지 않으면 나에게 오래 걸렸을 것 같은 간단한 수정. 답변 해 주셔서 감사 드리며 환영합니다. –

관련 문제