将视图控制器分配给 prepareForSegue 中的变量时的 Swift EXC_BREAKPOINT

Posted

技术标签:

【中文标题】将视图控制器分配给 prepareForSegue 中的变量时的 Swift EXC_BREAKPOINT【英文标题】:Swift EXC_BREAKPOINT when assigning viewcontroller to variable in prepareForSegue 【发布时间】:2014-07-03 12:58:25 【问题描述】:

尝试使用我的destinationViewController 执行变量分配时出现错误。

错误信息是这样的: 线程 1:EXC_BREAKPOINT(代码=EXC_I386_BPT,子代码=0x0)

这在我的 prepareForSegue 函数中。

override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) 
    if segue.identifier == "LoginSegue"

        let vc = segue.destinationViewController as LoggedInViewController
        vc.email = emailTextfield.text

    

在另一个文件中是这样的。

var email: String?

位于顶部。 那么这个:

override func viewDidLoad() 
    super.viewDidLoad()

    println("Email is:")
    println(email)
    println("Email was")

但我从来没有进入第二个文件。

标记为错误的是 let vc = segue.destinationViewController as LoggedInViewController 这一行。

两个 swift 文件都连接到导航控制器。

我不知道你还需要什么,但我当然会发布你需要理解的所有代码!

谢谢!

【问题讨论】:

【参考方案1】:

在您的情况下,目标控制器是导航控制器而不是您的 LoggedInViewController ,所以 segue.destinationViewController as LoggedInViewController 是一个错误,因此它正在崩溃。

这样试试

override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) 
    if segue.identifier == "LoginSegue"
            let navigationController = segue.destinationViewController as UINavigationController

        let vc = navigationController.topViewController as LoggedInViewController
        vc.email = emailTextfield.text

    

【讨论】:

该死的! :D 不能投票,只有 1 个代表! :( 但感谢您花时间帮助我 :) 是的,注意到了!我现在有! 我刚刚遇到了一个类似的错误,我实际上使用了相同的错误,但我使用了navigationController.viewControllers[0] 而不是navigationController.viewControllers[0]。有区别吗? @OliverBorchert 你是对的。您应该使用 topViewController 来获取导航堆栈上的当前视图控制器。 viewControllers[0] 给出底部视图控制器。我刚刚编辑了我的答案,感谢您的关注。【参考方案2】:

如果有人因为这是 EXC_BREAKPOINT 上的第一次点击而来到这里:

对我来说,这个非常明显的异常是因为 fatal error: unexpectedly found nil while unwrapping an Optional value 而引发的,因为在初始化之前使用了 IBOutlet。

【讨论】:

以上是关于将视图控制器分配给 prepareForSegue 中的变量时的 Swift EXC_BREAKPOINT的主要内容,如果未能解决你的问题,请参考以下文章

通过 prepareForSegue 传递 NSString - Swift

来自一个视图控制器的两个segue,prepareForSegue

swift - 通过 prepareforsegue 在 2 个视图控制器之间添加值

prepareforsegue 函数中的变量为空

使用 prepareForSegue 在视图控制器之间传递数据

将选项卡栏控制器嵌入导航控制器时的 prepareForSegue