在tableView重新加载时崩溃

时间:2018-07-27 12:55:12

标签: ios swift

我有一个类别collectionView,当我单击任何单元格时,每个单元格上都有类别labelslabel的值会通过prepareForSegue传递给第二个viewController的类别变量并且在设置了类别变量的值时,didSet会调用loadData()函数。

func loadData()
{

    let companyData = Database.database().reference().child("CompanyReviews")
    companyData.queryOrdered(byChild: "Category").queryEqual(toValue: category).observe(.value, with: {(snapshot) in
        for child in snapshot.children
        {
            let companyObject = Companies()
            let dataSnapshot = child as! DataSnapshot

            companyObject.companyName = dataSnapshot.childSnapshot(forPath: "CompanyName").value as! String
            companyObject.owner = dataSnapshot.childSnapshot(forPath: "CompanyOwner").value as! String
            companyObject.contactNumber = dataSnapshot.childSnapshot(forPath: "ContactNumber").value as! String
            companyObject.location = dataSnapshot.childSnapshot(forPath: "location").value as! String
            companyObject.gstNumber = dataSnapshot.childSnapshot(forPath: "GSTNumber").value as! String
                self.companyArray.append(companyObject)
            }
            if self.companyArray.count > 0
            {
                self.CompanyTable.reloadData()
                print(self.companyArray.count)
            }
            else
            {
                self.noData.text = "No Data Available"
                self.CompanyTable.backgroundView = self.noData
            }
        })
}

如果该类别下存在某些数据,则tableView将加载该数据,否则tableViews backgroundView将显示“无可用数据”。 该应用程序运行完美。现在有一个类别下面没有数据,而两个类别则有数据。问题是选择一个类别然后返回并选择其他类别后,应用崩溃 在self.CompanyTable.reloadData()处出现错误:

  

在展开可选文件时意外发现nil。

我真的不知道为什么会这样,我在google上搜索,甚至在stackOverflow上找到了一些答案,但没有任何线索。我是swift编程的初学者,所以请帮助我解决这个问题。

1 个答案:

答案 0 :(得分:-1)

  

设置category变量的值时,didSet会调用loadData()

摆脱Publisher是崩溃的原因,您需要在didSet中调用loadData(),原因是在VC加载之前,VC的所有出口都为零。当控制位于viewDidLoad内部时,情况并非如此,如果网络速度不快,您可能会很幸运,但是您不应该将应用程序置于可能的境地

也将prepareForSegue替换为observe,因为前者是观察者,被称为服务器中的每次更改