从didSelectRowAtIndexPath查看控制器Segue

时间:2014-11-02 22:52:20

标签: ios objective-c iphone uitableview swift

尝试设置从UITableView中的4个不同单元格触发的4个不同的segue,以便在我的应用程序中切换到不同的视图控制器。我的主菜单嵌入在导航控制器中。我通过控制从主菜单视图控制器拖动到我的4个不同的视图控制器来设置segue。然后在didSelectRowAtIndexPath中切换indexPath。行并从此方法实例化我的segues。我遇到的问题是执行segue时出现 SIGABRT 崩溃。 prepareForSegue被调用,因此我知道segue正在被触发,但它导致了我无法理解的崩溃。代码发布如下,任何帮助将不胜感激,谢谢。

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{


    switch(indexPath.row)
    {
        case 0:
            break;

        case 1:
        {

            [self performSegueWithIdentifier:@"SecondViewController" sender:self];
            //Also tried passing in the cell for the parameter "sender:" but this
            //doesnt work either. 

           break;
        }

        //Other segues would be performed in a similar manner. 

        case 2:
            break;

        case 3:
            break;

        case 4:
            break;

        case 5:
            break;
    }

}

enter image description here

1 个答案:

答案 0 :(得分:1)

您的segue被配置为“推送”segue。这意味着SecondViewController的实例将被推送到导航控制器的导航堆栈。 (见Push Segues on Apple's storyboard tutorial。)

但是,您的表视图控制器不在导航控制器内,因此这是不可能的。 (没有一堆视图控制器可以继续使用。)

您的简单选择:

  • 将您的segue更改为“Show”(在Xcode 6中)或“Modal”(在Xcode 5中)
  • 将您的表视图控制器嵌入导航控制器中,因此有一个堆栈可以推送到

更复杂的解决方案涉及构建自定义父视图控制器和定义自定义转换,但我认为这不是您所追求的。


一些不相关的一般信息:

  • 您尝试更改“发件人”并不重要。所有“发件人”都允许您将所需的任何对象传递到prepareForSegue:sender:方法。否则忽略此参数。
  • 当您遇到崩溃时,您应该始终阅读控制台和堆栈跟踪。如果您无法解决这个问题,请将它们包含在Stack Overflow问题中。如果您不熟悉调试这些内容,那么My App Crashed, Now What?是非常好的阅读。