2011-05-01 11 views
0

내비게이션 기반 응용 프로그램을 만들고 있습니다. 내 rootViewController가 첫 번째가있는 UIViewController를 누르면 - 언제 가 밀려 3 개 세포를 포함 년 - 문제는 응용 프로그램이 더 실행되지 않는있는 UITableViewControlleriphone UITableVIew (내비게이션 기반)

을 추진하기로되어있는 2 층과 3 세포와 (이 작품) 오류가 발생하지 않으며 전혀 충돌하지 않지만 tableview로 이동하면 빈 테이블이 요소없이 표시됩니다.

코드의이 부분에 문제가 있습니까 ?? :

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 

    UIViewController *detailViewController = [[UIViewController alloc] initWithNibName:@"Introduction" bundle:nil]; 
    [email protected]"Introduction"; 

    UITableViewController *myPictures = [[UITableViewController alloc] initWithNibName:@"Pictures" bundle:nil]; 
    [email protected]"Pictures"; 

    UITableViewController *myImages = [[UITableViewController alloc] initWithNibName:@"ImagesViewController" bundle:nil]; 
    [email protected]"Images"; 

    // Pass the selected object to the new view controller. 
    if (0 == indexPath.row) 
    [self.navigationController pushViewController:detailViewController animated:YES]; 

    if (1== indexPath.row) 
    [self.navigationController pushViewController:myPictures animated:YES]; 

    if (2== indexPath.row) 
    [self.navigationController pushViewController:myImages animated:YES]; 

    [detailViewController release]; 
    [myPictures release]; 
    [myImages release]; 
+1

당신은 당신의 viewControllers 경우에만의 인스턴스를 생성한다 그 행은 당신의 메모리 사용량을 최소화하도록 선택되었습니다. "그러나 내가 tableview로 이동했을 때"의 의미를 설명 할 수 있습니까? viewController를 보여줄 셀을 클릭하여 말합니까? –

+0

예, c 물론 셀 ... 답장을 –

답변

0

당신이하고있는 일은 (원래의 문제는 별개로) 매우 잘못되었습니다. 왜 각 뷰 컨트롤러를 인스턴스화하고 현재 '셀 선택'을 기반으로 한 뷰 컨트롤러 만 사용하고 있습니까? 이렇게하면 각보기를로드하는 데 걸리는 시간에 따라 앱이 느려질 수 있습니다. 관련 뷰 컨트롤러 내부에만 "if (indexPath.row == 2) {"블록을 인스턴스화해야합니다.

당신의 접근 방식에 대한 많은 잘못된 점이 있습니다. 당신이하고있는 일은 일반 UITableViewController를 인스턴스화 한 후에 결코 작동하지 않을 것입니다. (당신이 자신의 펜촉을 제공하더라도) 분명히 빈 뷰만 보여줄 것입니다. 펜촉을 위임자로 묶어서 TableView에 데이터를 제공하는 자신 만의 클래스가 필요합니다.

이러한 nib 파일 (예 : "그림")을 만들었을 때 xcode가 'PicturesViewController.h and PicturesViewController.m "파일을 제공한다고 생각합니까? 그렇다면 적절한 코드를 작성하고 Tableview를 보장해야합니다. .은 "그림"nib 파일이 '소스'와 'PicturesViewController'설정 '위임'을 가지고에 그런 당신이보기를 표시 할 때 대신 이렇게 :

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 

    if (indexPath.row == 1) { 
     ... 
    } else if (indexPath.row == 2) { 
    PicturesViewController *myPictures = [[PicturesViewController alloc] initWithNibName:@"Pictures" bundle:nil]; 

    [self.navigationController pushViewController:myPictures animated:YES]; 
    [myPictures release]; 
    } 

} 
+0

감사 을 핥는, 난 내 코드를 수정 + 내 picturesviewcontroller.h에서 & .mi 표시 할 항목의 배열을 사용하고 "사진"nib 파일에있는 tableview는 '소스'를 가지고 및 '위임자'는 'picturesviewcontroller'로 설정됩니다. 하지만 코드는 오류를 "예상치 못한 인터페이스 pictureViewController" 를주고 내가 그렇게 할 수있는 방법 : 당신은 펜촉이 다음의 TableView를 공급하는 대리인으로 연결되어 있습니다 자신의 클래스를 가질 필요 " 데이터와 함께. " –

+1

코드를 보지 않고는 말할 수 없습니다. 그러나 단순히 클래스 이름을 다르게 지정하면 내 코드가 그대로 사용되어 작동하지 않습니다. 그것은 단지 예로서 봉사하는 것이 었습니다. 내 코드의 모든 클래스 이름을 사용중인 실제 이름으로 바꾸십시오. 또한 대답의 '수용'은 인정 될 것입니다. – strange

+0

lool .. 나는 iphone dev thingy에서 아직 새로운데, 나는 같은 이름의 클래스를 사용하는 것은 멍청하지 않다. 예를 들면 : P –

관련 문제