3

ナビゲーションコントローラーを正しく実行するのに問題があります!RootViewControllerでテーブルのセルをクリックすると、次のViewControllerではないように見えます。

エラーメッセージは次のようになります

「アプリケーションがnilviewコントローラーをターゲットにプッシュしようとしました。」</p>

だから私は何か間違ったことを割り当てます、私の推測でした、私はおそらく私がフォローしている本から重要な何かを見逃しています。

したがって、問題は私のRootViewController.mに表示されます。

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

    UINavigationController *navigationController= [[UINavigationController alloc]init];

    switch ([indexPath row]) {

        case 0:
            [navigationController pushViewController:kundeViewCon animated:YES];
            break;

        case 1:
            [navigationController pushViewController:kalenderViewCon animated:YES];
            break;

        case 2:
            [navigationController pushViewController:wunschViewCon animated:YES];
            break;
    } 
}

私のAppDelegate.mでは、RootViewControllerをNavigationControllerとして設定するために次のことを行っています。

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.

// Navigation Controller

    RootViewController *rootViewController = [[RootViewController alloc]init];

    navigationController = [[UINavigationController alloc]initWithRootViewController:rootViewController];

    self.window.backgroundColor = [UIColor whiteColor];

    [self.window addSubview:navigationController.view];
    [self.window makeKeyAndVisible];
    return YES;
}

そのため、セルをクリックすると、プッシュしたい他のすべてのViewControllerを取得しました。自分のせいや足りないものが見えない!?

多分誰かが私を助けて私にヒントを与えることができます!それは素晴らしいことです!

4

3 に答える 3

5

RootViewControllerには既にナビゲーション コントローラーがあります - アプリ デリゲートで作成しました。セルを選択したときに新しいナビゲーション コントローラーを作成しても意味がありません。おそらく次のようになります。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    switch ([indexPath row]) {
        case 0:
            [self.navigationController pushViewController:kundeViewCon animated:YES];
            break;
        case 1:
            [self.navigationController pushViewController:kalenderViewCon animated:YES];
            break;
        case 2:
            [self.navigationController pushViewController:wunschViewCon animated:YES];
            break;
    }
}

-pushViewController:animated:また、 View Controller (つまりkundleViewCon, kalenderViewCon& )を呼び出すときwunschViewConは非 nil であることを確認してください。それらはインスタンス変数またはプロパティのように見えます-viewDidLoad

于 2011-12-05T23:28:32.423 に答える
1

新しい UINavigationController を作成する必要はありません。現在のウィンドウからコントローラーを取得する必要があります。

[self.navigationController pushViewController:yourController animated:YES];

yourController は、インスタンス化された UIViewController (kundeViewCon、kalenderViewCon、または wunschViewCon) の 1 つです。

于 2011-12-05T23:29:12.097 に答える
1

Google 社員向け:

これは、ViewController を以下に接続していない場合にも発生する可能性があります。

"<Your Project> App Delegate"

そうしないと、コントローラーが初期化されません。

また、ViewController のクラスの名前を対応する .h / .m ファイルに変更する必要があります。

xib ファイルを開きます -> ViewController を選択します -> "Identity Inspector" に移動します -> Textfield の "Class" に対応する .h/.m ファイルの名前を入力します。

ViewController をアプリに接続する 右クリックして ...AppDelegate から ViewController にドラッグします ここに画像の説明を入力 対応するエントリをクリックして放した後: ここに画像の説明を入力

于 2012-09-10T13:56:32.387 に答える