我知道还有其他一些关于类似错误的帖子,但是当用户试图传递一些数据时,会查看他们在准备segue方法时发生的那些错误。就我而言,我只是想从一个vc转到另一个vc。 IBOutlet与Storyboard相关联。我检查目的地vc准备segue并且它存在。在调用该方法之后发生崩溃。
这是我的代码:
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var btnShowAccount: UIButton!
@IBOutlet weak var ivLaunch: UIImageView!
@IBOutlet weak var vButtonWrapper: UIView!
@IBOutlet weak var btnMissionLog: UIButton!
@IBOutlet weak var btnAccount: UIButton!
@IBOutlet weak var btnNotes: UIButton!
@IBOutlet weak var btnInfo: UIButton!
@IBOutlet weak var btnPrivacy: UIButton!
@IBOutlet weak var btnHelp: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
//align button text to left
btnAccount.contentHorizontalAlignment = .left
btnMissionLog.contentHorizontalAlignment = .left
btnNotes.contentHorizontalAlignment = .left
}
override func viewDidAppear(_ animated: Bool) {
self.ivLaunch.fadeOut(0.15)
self.vButtonWrapper.fadeIn()
}
@IBAction func showAccount(_ sender: Any) {
self.performSegue(withIdentifier: "toAccountFromRoot", sender: self)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
print(segue.destination)
}
错误消息未指向编译器尝试解包的对象:
Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value
XCode不太有用,因为它在第一行代码中的viewDidLoad中显示错误,这显然已经发生了。 (如果我注释掉所有viewDidLoad代码,它会在viewDidAppear中显示错误。)
我在调试导航器中看到了这一点:
; function signature specialization <preserving fragile attribute, Arg[1] = [Closure Propagated : reabstraction thunk helper from @callee_owned (@unowned Swift.UnsafeBufferPointer<Swift.UInt8>) -> () to @callee_owned (@unowned Swift.UnsafeBufferPointer<Swift.UInt8>) -> (@out ()), Argument Types : [@callee_owned (@unowned Swift.UnsafeBufferPointer<Swift.UInt8>) -> ()]> of generic specialization <preserving fragile attribute, ()> of Swift.StaticString.withUTF8Buffer<A>((Swift.UnsafeBufferPointer<Swift.UInt8>) -> A) -> A
任何帮助都会受到赞赏,我有点困惑于此。
答案 0 :(得分:0)
您的堆栈抓取强烈建议您的destinationVC的类型100 * Bk
与您的第一个VC使用的类相同。
您可以通过添加:
来验证这一点Y
到您的ViewController
方法。如果它打印print(type(of: segue.destination))
,那么这就是你的问题。
在这种情况下,prepare(for:sender:)
中的崩溃是在destinationVC加载时。因为它设置为ViewController
而不是viewDidLoad
(这是您对空白VC的期望),所以插座未连接,因此您在尝试访问时会收到解包的nil消息{{1 }}。通过删除 Identity Inspector 中的类来修复空白视图控制器的类。
一旦你确认这是有效的。为destinationVC创建一个新类(即ViewController
的子类),并在 Identify Inspector 中分配该类。