UINavigationController:app冻结

时间:2012-11-27 09:47:13

标签: ios xcode

在myAppDelegate.m中:

MainViewController *mainViewController         = [ [MainViewController alloc] init];
UINavigationController *navController = [[UINavigationController alloc]
                                         initWithRootViewController:mainViewController];

[navController setNavigationBarHidden:YES];
[[self window] setRootViewController:navController];

在MainViewController.m中没什么特别的,只有一个动作绑定到一个按钮:

- (IBAction)go:(id)sender {
   if (!whereamiViewController)
   {
      whereamiViewController = [[WhereamiViewController alloc] init];
   }
   [[self navigationController] pushViewController:whereamiViewController animated:YES];

}

在WhereamiViewController.m中只是一个按钮,用于在UINavigationViewController中显示另一个屏幕:

-(IBAction)showList:(id)sender
{

PointsViewController *container = [[PointsViewController alloc] init];
[[self navigationController] pushViewController:container animated:YES];
}

@interface PointsViewController : UITableViewController

@end

一切都很好。但当我登陆最后一个屏幕时,PointsViewController,我回到了WhereamiView,应用程序冻结,Xcode在CoureFoundation,CFHas显示陷阱。

现在,我知道Objective-C不是php,但这确实是一个简单的例子:我错过了什么?有一种方法可以调试问题吗?

调试器说:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-  [__NSCFType _forgetDependentConstraint:]: unrecognized selector sent to instance 

今天早上我在模拟器内运行应用程序,没有崩溃!这怎么可能?如果我在iPhone崩溃中运行,在模拟器中没有崩溃。

3 个答案:

答案 0 :(得分:0)

我并没有真正看到问题所在,因为它发生在您发布的代码之外。我可能会遗漏一些东西,但如果你回到whereamiViewController时应用程序崩溃了,你怎么回去?我没有看到它在这里详述的地方。

对于这样的navigationControllers,您可以推送(添加)或弹出(删除)viewControllers来上下移动navcontroller树。正是在这一点上,应用程序似乎崩溃,你可能值得发布这个怎么样?你在哪里弹出容器(PointsViewController *)。

根据您发布的代码,我怀疑您可能会尝试通过重新推送它来回到whereamiViewController

答案 1 :(得分:0)

蒂姆是对的。弹出PointsViewController就是我这样做的方式。

你的Xcode说什么?你能提供调试器的内容吗? 这对于追踪出现问题更有帮助。

答案 2 :(得分:0)

[部分解决] 这很奇怪:在调试所有内容并删除所有可疑声明后,没有任何改进。同样崩溃SIGABRT。重启iPhone和Mac后,一切都很好!