0

これが私のコードです:

- (IBAction)play {
    if (!self.mapViewController)
    {
        self.mapViewController = [[MapViewController alloc]initWithNibName:@"MapViewController" bundle:nil];
    }
    [self.navigationController pushViewController:mapViewController animated:YES];
}

何が起こるか: 初めて再生ボタンを押したときに、新しいビューが表示されません。もう一度押すと、同じ UIViewController がスタックに複数回追加されているため、クラッシュします。これを修正する方法を知っている人はいますか?

編集:すべての回答に感謝します。xib を確認したところ、リンクを台無しにしていたことがわかりました。修正しました:)

4

4 に答える 4

0

-init merhodでビューコントローラーを作成し、-playでビューコントローラーのみをプッシュします。ビューコントローラが、ユーザーがビューコントローラから「終了」できるように設計されていることを確認してください。これにより、ビューコントローラがスタックからポップされ、複数の開口部でエラーが発生しなくなります。

于 2012-04-30T04:21:27.637 に答える
0

UINavigationControllerあなたが思っているよりも多くの簿記をします。コントローラを作成してプッシュするだけです。独自の参照を維持する必要はありません。

また、nibMyView.xibに名前を付ける場合は、その名前を明示的に指定する必要はありません。初期化時にそれを取得します。nibNameプロパティドキュメントから:

MyViewControllerのように、ビューコントローラのクラス名が「Controller」という単語で終わる場合、MyView.nibのように、「Controller」という単語のないクラス名と名前が一致するnibファイルを検索します。

したがって、コードは次のようになります。

- (IBAction)play {
    // Implicitly loads MapViewController.xib
    UIViewController* mapViewController = [[[MapViewController alloc] init] auotrelease];
   [self.navigationController pushViewController:mapViewController animated:YES];
}

Mapがを使用している限りpopViewControllerUINavigationControllerは割り当て解除を処理し、スタックに複数のコピーが作成されないようにします。

于 2012-04-30T04:21:46.443 に答える
0

これを試してください -->

 - (IBAction)play 
{
    mapViewController = [[MapViewController alloc]initWithNibName:@"MapViewController" bundle:nil];
    [self.navigationController pushViewController:mapViewController animated:YES];
    [mapViewController release];
}
于 2012-04-30T06:20:31.523 に答える
0

以下のコードを試してください。これは私にとってはうまくいきました:現在のviewcontrollerがuinavigationコントローラーでない場合は、このコードを試してください:

- (IBAction)play {
   MapViewController *mapView = [[MapViewController alloc]initWithNibName:@"MapViewController"    bundle:nil];
   UINavigationController *navController = [[UINavigationController alloc]  initWithRootViewController:mapView];
   [self presentModalViewController:navController animated:YES];
}

(または) currentviewcontroller が uinavigation コントローラーの場合、以下のコードを試してください:

  - (IBAction)play {
    MapViewController *mapView = [[MapViewController alloc]initWithNibName:@"MapViewController"    bundle:nil];//Note:Check the mpviewcontroller xib file name as MapViewController is correct
    [self.navigationController pushViewController:mapViewController animated:YES];
   }

ありがとう..!

于 2012-04-30T04:35:41.213 に答える