我有一个带有表视图的视图控制器。当有数据时,它将填充在表视图中。如果没有数据,则不必显示数据标签。我使用下面的代码。但它在这条线上的崩溃:
func numberOfSections(in tableView: UITableView) -> Int {
var numOfSection: NSInteger = 0
if (self.alldata?.count)! > 0 {
self.tableView.backgroundView = nil
numOfSection = 1
} else {
let rect = CGRect(x: 0,
y: 0,
width: self.tableView.bounds.size.width,
height: self.tableView.bounds.size.height)
let noDataLabel: UILabel = UILabel(frame: rect)
noDataLabel.text = "No Data Available"
noDataLabel.textColor = UIColor(red: 22.0/255.0, green: 106.0/255.0, blue: 176.0/255.0, alpha: 1.0)
noDataLabel.textAlignment = NSTextAlignment.center
self.tableView.backgroundView = noDataLabel
}
return numOfSection
}
此行崩溃:if (self.alldata?.count)! > 0 {
崩溃:(lldb)
。我没有进一步的信息。
提前致谢!
答案 0 :(得分:1)
你强行打开数组,没有数据时为nil。因为它崩溃了。
像这样检查
if let alldata = self.alldata, alldata.count > 0 {
self.tableView.backgroundView = nil
numOfSection = 1
}
答案 1 :(得分:1)
将(self.alldata?.count)! > 0
更改为self.alldata?.count ?? 0 > 0
。你强行展开(self.alldata?.count)
的结果,所以如果alldata
为零你就强迫展开一个零;
另一方面,在numberOfSections
等功能中产生副作用是一种非常糟糕的做法。该函数应该只返回部分的数量而不再执行任何操作。将UI操作放在其他位置。
答案 2 :(得分:0)
崩溃可能是因为def post(self, request, *args, **kwargs):
lform = forms.DockerAuthForm(request.POST)
context = {}
if lform.is_valid():
data = lform.cleaned_data()
name = data['docker_name']
password = data['docker_pass']
context = {
"mname": name,
"mpass": password
}
return render(request, 'dockerDep/response.html', context)
为零并且您尝试在alldata
中展开它。尝试修改它,如
(self.alldata?.count)!