【问题标题】:View Controller Segue from didSelectRowAtIndexPath从 didSelectRowAtIndexPath 查看控制器 Segue
【发布时间】:2014-11-02 22:52:19
【问题描述】:

尝试在UITableView 中设置从 4 个不同单元格触发的 4 个不同的转场,以转场到我的应用程序中的不同视图控制器。我的主菜单嵌入在导航控制器中。我通过控制从主菜单视图控制器拖动到我的 4 个不同的视图控制器来设置 segues。然后在didSelectRowAtIndexPath 我切换indexPath.row 并从这个方法实例化我的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;
    }

}

【问题讨论】:

  • 你的 segues 是否从 tableview 连接到它们的目的地?这可能是问题所在(无论如何对我来说)尝试将 segues 从您拥有的视图控制器(即包含您的 tableview 的视图控制器)连接到目标视图控制器。希望这会有所帮助。
  • 在哪里声明发生了 SIGABRT,您能否分享实际的异常 - 例如,究竟是什么导致了崩溃?另外,如果您转到情节提要中的相应segue,它是否名为SecondViewController?如果不是,那可能就是问题所在——它试图执行一个不存在的转场。
  • @Gismay 是的,segues 是从包含 tableView 的视图控制器连接的。一定是其他原因导致了问题。
  • @mMo 啊,我想我可能有更多信息。我的控制台由于某种原因关闭并且没有考虑它,但是从控制台这里是显示在异常上的内容:*** 由于未捕获的异常“NSGenericException”而终止应用程序,原因:“找不到导航控制器对于 segue 'SecondViewController'。只有当源控制器由 UINavigationController 的实例管理时,才能使用 Push segues。'

标签: ios objective-c iphone uitableview swift


【解决方案1】:

您的 segue 被配置为“push” 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? 非常适合阅读。

【讨论】:

  • 我明白你在说什么。我想问题也可能是我没有使用 UITableViewController,而是使用 UIViewController 和 UIViewController 内部的 tableView。我添加了一张图片,展示了情节提要的配置方式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多