【问题标题】:performSegueWithIdentifier not executedperformSegueWithIdentifier 未执行
【发布时间】:2016-06-08 19:32:05
【问题描述】:

我正在尝试使用 segue,这是我的代码:

if let status_code = response.response?.statusCode {
    if status_code == 200 {
        // register is ok
        // cancel all warnings
        self.usernameField.hidden = false;
        self.usernameFieldError.hidden = true;
        self.usernameShortError.hidden = true;
        self.usernameTakenError.hidden = true;

        self.performSegueWithIdentifier("registerToFeed", sender: self);
    }
}

(我已经剪掉了长度的代码)
所以这就是问题所在:segue 根本没有被执行。我在上面放了一个断点看看会发生什么,然后执行流程就这么过去了,什么都不做,很郁闷

我读到需要在主线程上调用 performSegueWithIdentifier,所以我在 segue 调用之前调用了NSThread.isMainThread(),它返回给我true

我还仔细检查了标识符名称是否与我正在调用的名称相同,就是这种情况。

我试过了

dispatch_async(dispatch_get_main_queue()){
    self.performSegueWithIdentifier("registerToFeed", sender: self)
}

正如我在 another SO thread 中看到的那样,但仍然无法正常工作,没有执行任何操作。

所以我不知道为什么这个简单的行没有被执行。感谢您的帮助。

编辑:这是完整的RegisterViewController.swift 文件:
http://pastebin.com/dpBBXhe8

问题是程序在第 190 行崩溃,因为 performSegue 没有执行。

【问题讨论】:

标签: swift segue


【解决方案1】:

这段代码在viewDidLoad 方法中吗?如果是这样,您必须将其移至viewDidAppear

【讨论】:

  • 不,它在@IBAction 中(由我的注册按钮触发)
【解决方案2】:

这段代码中的 viewController (self) 是从哪里来的。 performSegueWithIdentifier(_:sender:) 要求调用 viewController 从情节提要中加载(情节提要不能为零)。

另外,您是否尝试过实现preapreForSegue 以查看在您调用performSegue 时是否会调用它? 'prepareForSegue' 的默认实现什么都不做。

【讨论】:

  • 调用 viewController 是从这里的故事板加载的。为了创建 segue,我只需按住 ctrl 将第一个视图(称为 RegisterViewController)拖到目的地(FeedViewController),然后设置标识符。我试图覆盖 prepareForSegue 函数但仍然无法正常工作,不过还是感谢您的回答
  • 作为测试,尝试将一个按钮拖到您的情节提要上,然后创建从按钮到新视图控制器的转场,看看是否可行?我还看到故事板文件搞砸了。可能想要检查情节提要的 XAML 并查看 segue 或 viewController 周围是否有任何奇怪的东西(旧标识符、不完整标记等),并尝试将 sender 设置为 nil,并在中更改序列标识符的名称通话并确保它爆炸(就像它应该的那样)。
  • 我没有添加另一个按钮,而是测试了我的登录视图控制器。它做同样的事情:测试字段和performSegueWithIdentifier,所以我尝试了它并且它有效,我可以进入FeedViewController。
  • 我也尝试过使用新按钮:它也可以@IBAction func testSegue(sender: AnyObject) { performSegueWithIdentifier("registerToFeed", sender: nil); } 并按照您的回答,我试图通过重命名标识符来故意炸毁呼叫,我遇到了正确的错误(没有用这样的名字继续)然后把它转回来,同样的事情。
  • 这告诉我们 if 语句代码有问题。您是否调试了 statusCode 响应?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-28
相关资源
最近更新 更多