ios - performSegueWithIdentifier 与 instantiateViewControllerWithIdentifier 对比

标签 ios ios5 storyboard xcode-storyboard

我似乎没有收到这个 SIGABRT,我一直收到。我有这个 Storyboard iOS 应用程序,在 Storyboard中我有一个 UITableViewController。现在,我可以获取 TVC 的一个单元格并使其推送“segue” View Controller ,但是如果我需要在某些条件下停止“segue”操作怎么办?显然你不能,因为 prepareForSegue: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];
}

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

现在:想法?

最佳答案

试试这个:

  1. 使用第一个代码块而不是第二个。
  2. 在 Storyboard控件中,从单元格拖动到另一个 View Controller 。请注意,已创建一个 segue。
  3. 点击转场。使用属性检查器提供 segue 和标识符“theOtherIdentifier”(推荐小写“t”)。假设您使用的是导航 Controller ,还可以选择“推送”的 segue 样式。
  4. Storyboard将实例化另一个 View Controller 。确保您没有在代码中这样做。

关于ios - performSegueWithIdentifier 与 instantiateViewControllerWithIdentifier 对比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8926606/

相关文章:

iphone - 在 iOS 5 上设置 sqlite 配置 SQLITE_CONFIG_SERIALIZED 返回 SQLITE_MISUSE

xcode - 如何处理进入同一个 View Controller 的两个 segue?

ios - 从底部滑入 UIView

javascript - 在 Canvas 上绘制 html5 视频 - 在 iPad 上

ios - View 的宽度和高度在定向后不会改变

iOS5 NSURLConnection 方法已弃用

ios - 无法在 viewDidLoad : 中以编程方式更改 constraint.constant

ios - 多个持久存储协调器核心数据

ios - Facebook API 权限重置

ios - 在表格 View 右上角设置图像