2010-08-03 3 views
0

내가 책에서 자습서를 follwing을하고 있고 대리인 및 데이터 소스 컨트롤러 (MyViewController.m)에서이 분리되어 이해별도의 위임 클래스

[self setDataSource:[[MyViewDataSource alloc] 
[self setDelegate:[[MyViewDelegate alloc] 

에서 탐색 컨트롤러에 접근, 지금 팝업 할 navcontroller이 응용 프로그램의 위임에 앉아 있기 때문에 대리자 클래스 (MyViewDelegate.m)에서 컨트롤러는

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
     2ndViewController *controller = [[2ndViewController alloc]]; 
     [[self navController] pushViewController:controller animated:YES]; 

물론이 작동하지 않습니다. 하지만 위임자 클래스에서 navcontroller에 가장 잘 액세스하려면 어떻게해야합니까?

답변

2

당신은 그러나

UINavigationController *navController = [(MyAppDelegate*)[[UIApplication sharedApplication] delegate] navigationController]; 

작업이 필요한 이유, 당신이 자신을 요청해야 뭔가를 할 수있는 더 MVC (모델 뷰 컨트롤러)와 유지에 더 좋은 방법과 규칙이있는 경우 캡슐화의.

예를 들어, UIViewController은 설명서에 설명 된대로 지정된보기 컨트롤러에 대한 적절한 탐색 컨트롤러를 반환하는 navigationController이라는 속성을 제공합니다.

+0

네 대리자 클래스가보기 컨트롤러와 별개이며 탐색 컨트롤러에 액세스해야하는 경우 더 나은 방법은 사용자가 초기화 할 때 대리자 개체에 속성을 설정하는 것입니다. –

+0

빠른 답장을 보내 주셔서 감사합니다! 내가하고 싶은 유일한 이유는 튜토리얼 방식으로 작업하게하는 것이 었습니다 ... –

관련 문제