将视图控制器分配给 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 个视图控制器之间添加值