16

我似乎没有得到我一直得到的这个 SIGABRT。我有这个情节提要 iOS 应用程序,在情节提要中有一个 UITableViewController。现在,我可以获取 TVC 的一个单元格并让它推动“segue”视图控制器,但是如果我需要在某些条件下停止“segue”操作怎么办?显然你不能,因为 prepareForSegue:sender: 方法不允许这样做,而且它似乎是在即将执行转换时调用的唯一回调。

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

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

- (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];
}

“作品”。引号表示这显然不是应该执行这种转换的方式。

现在:想法?

4

1 回答 1

8

尝试这个:

  1. 使用第一个代码块而不是第二个。
  2. 在故事板控件中,从单元格拖动到另一个视图控制器。请注意,创建了一个 segue。
  3. 点击转场。使用属性检查器提供 segue 和标识符“theOtherIdentifier”(建议使用小写“t”)。假设您使用的是导航控制器,还请选择“推送”的 segue 样式。
  4. Storyboard 将实例化另一个视图控制器。确保您没有在代码中执行此操作。
于 2012-01-19T14:55:04.537 回答