2009-09-16 4 views
4

저는 UITableView가 있고 사용자가 행을 클릭 할 때마다 (NSLog를 사용하여 확인한) 호출 된 didSelectRowAtIndexPath를 설정했습니다.pushViewController는 UITableView의 didSelectRowAtIndexPath에서 아무 것도하지 않습니다.

그러나 동일한보기를 다시로드하고 다른 데이터를 변경하려고합니다. 예를 들어, 원격 웹 서버에 디렉토리 내용을 표시하고 사용자가 행을 클릭하자마자보기를 다시로드하고 선택한 디렉토리 (행)의 내용을 표시하려고합니다.

이 코드를 사용하고 있습니다 :

FirstViewController *fvController = [[FirstViewController alloc] initWithNibName:@"MainWindow" bundle:[NSBundle mainBundle]]; 
fvController.currentDirectory = currentDirectory; 
[self.navigationController pushViewController:fvController animated:YES]; 
[fvController release]; 
fvController = nil; 

그러나, 그것은 아무것도하지 않고 프로그램이 실행 유지합니다. IB에 연결이 누락되었다고 가정합니까?

답변

6

아무 것도 일어나지 않는 이유는 이 nil 일 확률이 높습니다. 아마 하나를 설정하지 않았기 때문일 것입니다. 귀하의 본능은 훌륭합니다. "아무 일도 일어나지 않을 때"는 거의 항상 무언가가 nil이라는 것을 의미하며, 무엇인가가 # nil 인 # 1 이유는 귀하가 IB에서 연결하지 않았다는 것입니다.

재귀 디자인은보기 컨트롤러의 작동 방식을 잘 보여줍니다. 네가 올바른 길을 가고있는 것 같아. 일부 자발적인 조언을 통해 더 나아갈 수 있습니다. 대신이 코드의 :

FirstViewController *fvController = [[FirstViewController alloc] initWithNibName:@"MainWindow" bundle:[NSBundle mainBundle]]; 
fvController.currentDirectory = currentDirectory; 

I은 ​​다음과 같습니다 것을 권장합니다

FirstViewController *fvController = [[FirstViewController alloc] initWithDirectoryPath:currentDirectory]; 

당신은 물론, -initWithNibName:bundle: 전화 -initWithDirectoryPath:를 작성해야합니다. 이는 NIB의 이름을 관리하는보기 컨트롤러 안에 넣고 -currentDirectory을 읽기 전용 또는 비공개로 설정할 수 있으므로 아무도보기 컨트롤러의 뒤에 숨기지 않으므로 일반적으로 코드를 더 쉽게 이해하고 유지 관리 할 수 ​​있습니다.

+0

Rob, 귀하의 의견과 추가 조언을 해주셔서 대단히 감사합니다. self.navigationController를 검사했지만 nil이 아니며 (이는 UINavigationController 유형 임) IB에서 올바르게 알고 있습니다. 그래도 행을 클릭해도 아무런 변화가 없습니다. 다른 디버그 팁? –

+0

간단히 말해, pushViewController가 호출되는지 확인하려면 어떻게해야합니까? –

+0

pushViewController 행에 중단 점을 설정하여 실행 중인지 확인 했습니까? 대상이 nil이 아니고 행이 실행되면 pushViewController가 호출됩니다. 두 번째로 가장 가능성있는 문제는 (navcontroller가 없으면) 전체 코드 블록이 실행되고 있지 않다는 것입니다. –

0

귀하의 제안에 감사드립니다. 빌드 메뉴에서 클린을 만들어야하고 프로젝트를 빌드해야한다는 것이 드러났습니다. 어떤 이유로 XCODE는 내 tableView와 UI 요소 간의 연결을 선택하지 않았으며 그 값은 NIL이었습니다.

1

먼저 RootViewController에서 푸시 해보세요.

UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:rootViewController]; 

[self.window addSubView:navController];

먼저 RootViewController에 가서 당신의 ViewController의 '있는 navigationController'속성이 전무되지 않습니다 그런 식으로, 당신의 소원의 ViewController에 밀어

..

: 예를 들어

관련 문제