切换到另一个视图时“EXC_BAD_ACCESS”

时间:2011-03-22 14:25:01

标签: objective-c xcode ios exc-bad-access

我有MainMenuViewController的按钮,其动作是

- (IBAction) goToFirstView {
    FirstViewController *fvc = [[FirstViewController alloc] init];
    [self.view addSubview:fvc.view];
    [fvc release];
}

FirstViewController有UIButton with action

- (IBAction) rightArrow {
    SecondViewController *svc = [[SecondViewController alloc] init];
    [self.view addSubview:svc.view];
    [svc release];
}

但是当我按下“rightArrow”按钮时,应用程序崩溃了“EXC_BAD_ACCESS”。找不到我的问题。请帮帮我。

2 个答案:

答案 0 :(得分:4)

[svc release];

问题出在这里。释放视图控制器时,视图的事件将以释放的对象为目标,并使程序崩溃(如果它是即时的,可能在viewDidLoad或viewDidAppear中,但无关紧要)。请注意,视图不会(通常是AFAIK)保留它的视图控制器,如果这可能是您的假设......

答案 1 :(得分:1)

当你说[self.view addSubview:svc.view]时,你将SecondViewController的视图添加到FirstViewController的视图中。与MainViewController和FirstViewController类似。你最终得到的是一个看起来像这样的视图层次结构:

  • 主要观点
    • 第一个观点
      • 第二个视图

我怀疑这真的是你想要的。相反,使用导航控制器和MainViewController作为导航控制器的根控制器,然后使用-pushViewController:animated:将控制器(而不是视图!)推送到导航堆栈。