簡體   English   中英

在viewDidLoad()之前調用UITableView委托方法

[英]UITableView delegate methods being called before viewDidLoad()

UIViewControllerviewDidLoad()有一個方法被調用來更新類變量。 一旦我導航到另一個視圖控制器並回到這個視圖控制器,就會首先調用UITableView的委托方法,其中正在使用該類變量。 應用程序崩潰,因為該變量正在viewDidLoad()構造。 如何解決這個問題? 謝謝。

有問題的類變量:

var showHideDict = Dictionary<Int, Bool>()

viewDidLoad()

override func viewWillAppear() {
    super.viewWillAppear()
    makeAPICall()
}

API調用方法:

func makeAPICall() {
    // create helper object
    let helper = ModelHelper()
    helper.createModels(receivedDict: result! as NSDictionary)

            // store the showHideDict
    for index in 0...(Modelclass.models.count - 1) {
        self.showHideDict[index] = true
    }

    DispatchQueue.main.async {
         self.tableView.reloadData()
    }
}

在您的UITableViewDelegate方法中,我認為您需要檢查字典中的數據是否按預期填充。 例如,這是我經常在我的代碼中執行的操作:

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
{
    return tableData?.count ?? 0
}

這就是說:如果tableData不是nil,則返回數組中元素的數量。 否則返回0

然后在你的cellForRowAt方法中,只是有條件地檢查showHideDict的數據是否按預期填充,如果不是強制解包。 Swift通過選項強制執行安全......使用它而不是反對它。

完成API調用后,您需要做的就是執行tableView.reloadData()並使用新填充的數據構建tableview。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM