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会做比你想象的更多的簿记工作。您只需要创建控制器并推送它。无需维护您自己的参考。

此外,如果您命名 nib MyView.xib,则无需明确指定它的名称;它会在初始化时捡起它。从nibName属性文档

如果视图控制器类名以单词“Controller”结尾,如在 MyViewController 中,它会查找名称与类名匹配但不包含单词“Controller”的 nib 文件,如在 MyView.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

好的,试试下面的代码,这对我有用:如果当前的 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 回答
0

试试这个 -->

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