performSegueWithIdentifier vs instantiateViewControllerWithIdentifier

Mor*_*eu5 16 storyboard ios ios5 xcode-storyboard

我似乎没有得到这个我不断得到的SIGABRT.我有这个故事板iOS应用程序,在故事板中我有一个UITableViewController.现在,我可以拿一个TVC的单元格并使其推动"segue"视图控制器,但是如果我需要在某些条件下停止"segue"动作呢?显然你不能,因为prepareForSegue:sender:方法不允许它,它似乎是转换即将执行时被调用的唯一回调.

所以我猜我可以进入tableView:didSelectRowAtIndexPath:并以编程方式执行segue.不是最理想的,但仍然......

好吧,事实证明我错了.或者至少,我做错了什么.最明显的方法是

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [self performSegueWithIdentifier:@"TheOtherIdentifier" sender:self];
}
Run Code Online (Sandbox Code Playgroud)

但整个应用程序崩溃了一个SIGABRT,它没有提供任何有用的信息(是的,我确定是那条线让应用程序崩溃,我检查了调试器:)而且,VC我正在尝试加载已正确设置标识符,因为以下代码

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    UIViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"TheOtherIdentifier"];
    [self.navigationController pushViewController:vc animated:YES];
}
Run Code Online (Sandbox Code Playgroud)

"作品".引号表明这显然不是应该进行这种转换的方式.

现在:想法?

T.J*_*.J. 8

试试这个:

  1. 使用第一个代码块而不是第二个代码块.
  2. 在storyboard控件中,从单元格拖动到另一个视图控制器.请注意,创建了一个segue.
  3. 点击segue.使用属性检查器给出segue和标识符"theOtherIdentifier"(建议使用小写"t").假设您使用的是导航控制器,也请选择"推"的segue样式.
  4. 故事板将实例化其他视图控制器.请确保您没有在代码中执行此操作.

  • 注意:如果你将segue样式设置为"push"并且你没有嵌入到有效的UINavigationController中...... Apple将无声地做任何事情:). (2认同)