我有一个类别collectionView
,当我单击任何单元格时,每个单元格上都有类别labels
,label
的值会通过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
编程的初学者,所以请帮助我解决这个问题。
答案 0 :(得分:-1)
设置category变量的值时,didSet会调用loadData()
摆脱Publisher
是崩溃的原因,您需要在didSet
中调用loadData()
,原因是在VC加载之前,VC的所有出口都为零。当控制位于viewDidLoad
内部时,情况并非如此,如果网络速度不快,您可能会很幸运,但是您不应该将应用程序置于可能的境地
也将prepareForSegue
替换为observe
,因为前者是观察者,被称为服务器中的每次更改