swift - VC 推送时线程 1 出错?

标签 swift segue

我的应用目前有 3 个 VC。 rootVC 通过 UIButton 以模态方式呈现第二个 VC——工作正常——但在第二个 VC 中点击 UILabel 后,我无法让第三个 VC 出现。

这是处理点击的 SecondVC 中的代码:

var goToStats : UILabel {
        var label = UILabel()
        label.frame = CGRect(x:0, y:0, width: 300, height: 60)
        label.center = CGPoint(x: view.center.x, y: view.center.y + 250)
        label.text = "Statistical Breakdown"
        label.font = UIFont(name: "Arial", size: 30)
        label.textAlignment = .center
        label.backgroundColor = UIColor(
                displayP3Red: 1/255,
                green: 102.0/255,
                blue: 102.0/255,
                alpha: 1)
        label.isUserInteractionEnabled = true
        label.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(handleTap)))
        return label
        }

    view.addSubview(goToStats)
}

@objc func handleTap() {
    print("Tapped!")

    let thirdVC = ThirdVC()
    self.navigationController!.present(thirdVC, animated: true, completion: nil)
}

运行后出现如下错误:

error

有解释吗?我想也许没有与第二个 VC 关联的导航 Controller (因为它返回 nil),但 VC 本身位于导航堆栈上,所以我认为这里不是这种情况。我的第三个VC有问题吗?这是当前代码:

import Foundation
import UIKit

class thirdVC : ViewController {


override func viewDidLoad() {
    super.viewDidLoad()

    view.backgroundColor = UIColor.green
}

感谢您的宝贵时间!

最佳答案

你的 rootViewController 可能是一个 navigationController 但是当你 present 像这样的东西时,

let secondVC = SecondVC()
self.navigationController!.present(secondVC, animated: true, completion: nil)

这并不意味着 SecondVC 将有一个 navigationController。要为 SecondVC 使用 navigationController,您需要将此 ViewController 嵌入到 navigationController 中,如下所示,

let secondVC = SecondVC()
let secondNavC = UINavigationController(rootViewController: secondVC)
self.navigationController!.present(secondNavC, animated: true, completion: nil)

现在,如果您将 SecondVC 中的 ThirdVC 呈现如下,那么它将起作用

let thirdVC = ThirdVC()
self.navigationController!.present(thirdVC, animated: true, completion: nil)

如果您没有在 UINavigationController 中嵌入第二个 ViewController,那么您将遇到崩溃,因为您正在强制解包(!) navigationController 在第二个 ViewController 中不可用。

关于swift - VC 推送时线程 1 出错?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51585770/

相关文章:

ios7 : Custom Push segue pre iOS7 style almost working

ios - 如何检测 collectionview 超出屏幕并将其返回到其初始滚动位置?

swift - NSURLRequest 在没有连接到服务器的情况下超时

Swift 数据到带有数据 :content/type 的 base64 字符串

ios - 通过segue将CollectionView的选定单元格索引发送到viewController

objective-c - 自定义 Segue 不播放声音

ios - 具有多个 NSDateFormatter 的 Swift 代码 - 优化

swift - 如何检测用户是否已从 Firebase 身份验证中删除?

ios - 在 iOS 8/9 中根据设备方向更改 Viewcontroller

swift: prepareForSegue indexPathForSelectedRow