Ios performsguewithidentifier vs instanceeviewController with identifier

Ios performsguewithidentifier vs instanceeviewController with identifier,ios,ios5,storyboard,xcode-storyboard,Ios,Ios5,Storyboard,Xcode Storyboard,我好像没有收到我一直收到的这个信号。我有这个故事板iOS应用程序,在故事板中我有一个UITableViewController。现在,我可以用TVC的一个单元,让它推“segue”视图控制器,但如果我需要在某些条件下停止“segue”操作,该怎么办?显然您不能,因为prepareforsgue:sender:方法不允许它,而且它似乎是在即将执行转换时调用的唯一回调 所以我猜我可以进入tableView:didSelectRowAtIndexPath:并以编程方式执行segue。次优,但仍然 事实

我好像没有收到我一直收到的这个信号。我有这个故事板iOS应用程序,在故事板中我有一个UITableViewController。现在,我可以用TVC的一个单元,让它推“segue”视图控制器,但如果我需要在某些条件下停止“segue”操作,该怎么办?显然您不能,因为prepareforsgue:sender:方法不允许它,而且它似乎是在即将执行转换时调用的唯一回调

所以我猜我可以进入tableView:didSelectRowAtIndexPath:并以编程方式执行segue。次优,但仍然

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

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [self performSegueWithIdentifier:@"TheOtherIdentifier" sender:self];
}
但是整个应用程序都崩溃了,因为SIGABRT没有提供任何有用的信息(是的,我确信是这一行导致应用程序崩溃,我用调试器检查过:)此外,我试图加载的VC正确设置了标识符,因为下面的代码

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    UIViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"TheOtherIdentifier"];
    [self.navigationController pushViewController:vc animated:YES];
}
“工作”。引号表明这显然不是执行这种转换的方式

现在:想法?

试试这个:

  • 使用第一个代码块,而不是第二个代码块
  • 在情节提要控件中,将单元格拖动到其他视图控制器。注意,创建了一个segue
  • 点击segue。使用属性检查器为序列和标识符指定“theOtherIdentifier”(建议使用小写字母“t”)。另外,如果您使用的是导航控制器,请选择segue样式的“推送”
  • 情节提要将实例化另一个视图控制器。确保您没有在代码中执行此操作

  • 为了清楚起见,您说过您为目标视图控制器设置了此标识符。但是你为segue本身设置了一个标识符吗?这是您在第一种情况下需要使用的标识符。好的,我遗漏了它。请参考T.J.的回答以获得进一步的评论。谢谢,这澄清了问题,除了如果我通过IB设置segue,那么无论发生什么情况,它都会被执行。我需要包括一个条件,例如,我需要根据在其他单元格中输入的值检查用户的身份。好的,很抱歉,我缺少情节提要控件部分:)编辑:Woops。再次抱歉。为了创建从一个VC到另一个VC的序列,我缩小了,但我刚刚意识到我可以通过拖动顶部的系统栏来完成。不管怎样,不用担心:我成功了:)太好了。我很高兴一切顺利。从系统栏的“从视图”控制器中的“按选择”创建序列对我来说是新的。我曾经为条件segue创建隐藏按钮。iOS SDK通常对我来说没有多大意义,但我总是尝试以一种有意义的方式来做事情,当我失败时,我只是咕噜咕噜,然后按照他们荒谬的方式做:)这次成功了,不过:)注意:如果你将segue样式设置为“推”而且您没有嵌入有效的UINavigationController中。。。苹果将默默地什么也不做:)。