【问题标题】:InstantiateViewControllerWithIdentifier CRASH (Xcode 4)InstantiateViewControllerWithIdentifier 崩溃(Xcode 4)
【发布时间】:2012-10-20 19:49:15
【问题描述】:

我在尝试加载我的 CafesViewController 时遇到了崩溃。我在文件检查器中将我知道的所有标识符都设置为 CafesViewController,并检查了“使用情节提要 ID”。

我的主菜单视图加载完美,因为它被定义为我的 plist 中的默认故事板,但是,当按下按钮加载我的咖啡馆列表时,加载咖啡馆选项时断开连接(我的应用程序是要做的事情)。

我当前的代码是:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([mlabel.text isEqualToString: @" Cafés " ])
    {        
    UIStoryboard *cafesViewController = segue.destinationViewController;
    cafesViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"CafesViewController"];
    }
}

如果有人可以提供意见,我将不胜感激,因为我不知道断开连接在哪里。错误当然是“'NSInvalidArgumentException',原因:'Storyboard () 不包含标识符为'CafesViewController'的视图控制器”

我认为我的号召性用语是错误的,但有人可以给我意见吗?

谢谢!

【问题讨论】:

  • 这里有几个问题。一个是destinationViewController 是一个视图控制器,因此不能是UIStoryboard。 (我原以为编译器会标记它!)不过,更大的是,当调用prepareForSegue: 时,您已经处于激活新视图控制器的过程中,因此似乎只是实例化另一个控制器就像一个错误的想法。
  • 谢谢菲利普!我已将版本修改为这样,但不确定这是否有效:
  • if ([mlabel.text isEqualToString:@"Cafés" ]) { UIStoryboard *cafes = [UIStoryboard storyboardWithName:@"Cafes" bundle:nil]; UIViewController *CafesViewController = [cafes instantiateInitialViewController]; [self presentViewController:CafesViewController 动画:YES 完成:nil]; }
  • 这很难,因为你是对的,我的主情节提要已经激活,在这里我试图用 IF 语句开始另一个,但我不确定还能做什么,因为我有多个使用带有这些 IF 语句的单个按钮激活情节提要。我想知道这是否可能......
  • 你认为我所有的观点都应该附在一个故事板上吗?

标签: xcode4 uiviewcontroller uistoryboard segue uistoryboardsegue


【解决方案1】:

我用下面的简单代码解决了我的问题:

-(void)mainButton
{
  if ([mlabel.text isEqualToString: @" Arts " ])
  {
    [self performSegueWithIdentifier:@"Arts" sender:self];
  }
}

在研究中,我了解到我可以通过上面指定的按钮简单地通过示例来做我想做的事情,而不是 PrepareForSegue。很简单。

【讨论】:

    猜你喜欢
    • 2012-12-10
    • 1970-01-01
    • 2015-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多