【问题标题】:Getting an error when accessing the tabbar controller swift快速访问标签栏控制器时出错
【发布时间】:2020-05-30 16:47:22
【问题描述】:

我在我的应用程序中使用了 UITabBarController。我想从其中一个选项卡的子视图访问我在选项卡栏中定义的变量:

let tabBar = tabBarController as! baseTabBarController

我已经为另一个标签完成了它,它工作正常。但是这一次,我得到了一个错误:

Fatal error: Unexpectedly found nil while unwrapping an Optional value: file /Users/ms/Desktop/invoice/invoice/PreviewViewController.swift, line 36
2020-05-30 18:46:26.511904+0200 Invo[9455:2542848] Fatal error: Unexpectedly found nil while unwrapping an Optional value: file /Users/ms/Desktop/invoice/invoice/PreviewViewController.swift, line 36

请帮忙!谢谢。

这是视图控制器类:

import UIKit
import WebKit

class PreviewViewController: UIViewController {

    @IBOutlet var webPreview: UIWebView!

    var invoiceComposer: InvoiceComposer!
    var HTMLContent: String!

    var invoiceNumber = 0

    override func viewDidLoad() {
        super.viewDidLoad()

        print(invoiceNumber)
    }

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)

        createInvoiceAsHTML()
    }

    func createInvoiceAsHTML() {
        invoiceComposer = InvoiceComposer()

        if let tabBar = tabBarController as? baseTabBarController {
            if let invoiceHTML = invoiceComposer.renderInvoice(invoiceNumber: String(invoiceNumber), invoiceDate: "", recipientInfo: tabBar.customerData[invoiceNumber][0].input, items: tabBar.itemsData[invoiceNumber], totalAmount: tabBar.totalData[invoiceNumber].total) {

                   webPreview.loadHTMLString(invoiceHTML, baseURL: NSURL(string: invoiceComposer.pathToInvoiceHTMLTemplate!)! as URL)
                   HTMLContent = invoiceHTML
            }
            print("works")
        }
        else {
            print("tabBarController is not of type baseTabBarController or either nil ")
        }

    }

}

这是故事板的视图:

Storyboard

这是标签栏控制器的实现:

导入 UIKit

class baseTabBarController: UITabBarController {

     var customerData: [[customerInformation]] = []
     var itemsData: [[Item]] = []
     var totalData: [TotalInformation] = []

     override func viewDidLoad() {
         super.viewDidLoad()
}

【问题讨论】:

    标签: swift error-handling


    【解决方案1】:

    tabBarController 不是 baseTabBarController 类型或 nil 你可以检查一下

    if let tabBar = tabBarController as? baseTabBarController {
    print("tabBarController exists and of type baseTabBarController")
    } else {
    print("tabBarController is not of type baseTabBarController or either nil ")
    }
    

    【讨论】:

    • 如果是这样,那为什么我第一次做同样的事情时它会起作用?
    • 你可以测试它....你只需发布一行...用我的代码替换它..它肯定不会崩溃
    • 好的,我测试过了,看来你是对的。但是为什么它在不同的时刻表现不同。我怎样才能访问它?
    • 我只知道你发布的 oe 代码行 :) 我怎么能告诉你?请发布必要的代码..您正在编写此代码的地方
    • 我有几个问题.. 您在 tabBar 中有 customerData 吗? PreviewViewController 在标签栏中?
    猜你喜欢
    • 2021-10-18
    • 1970-01-01
    • 2015-08-17
    • 1970-01-01
    • 2014-01-06
    • 1970-01-01
    • 2018-08-04
    • 1970-01-01
    • 2015-02-16
    相关资源
    最近更新 更多