我知道有很多关于这个错误的问题,但我经历了所有这些问题,但没有一个帮助过。我从我的主类调用函数addCell(),下面的代码就是我在TableViewControllerClass中的代码。我肯定将我的requestIdentifier“cell”链接到我的.storyboard中,并且数组“locations”和“times”肯定不是空的,因为我在发生错误时打印它们,所以问题必须是我的“table”变量,这也正确地链接到表视图,但由于某种原因显然是零。有什么建议吗?
func addCell(){
//update to insertion sort
currLocation = addLocation
if (locations == [""] && times == [0]) {
self.locations.removeAll()
self.times.removeAll()
}
if !(locations.isEmpty){
if locations[locations.count-1] != currLocation {
var count = 0
var neverVisited = true
for location in locations{
if location == currLocation{
neverVisited = false
times[count] += addTime
count++
}
}
if neverVisited {
locations.append(currLocation)
times.append(addTime)
}
} else {
times[times.count-1] = addTime
}
} else {
locations.append(currLocation)
times.append(addTime)
}
print(locations) //not empty
print(times) //not empty
table.reloadData() //crashes here
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath)
cell.textLabel?.text = locations[indexPath.row] + ", \(times[indexPath.row])"
}
return cell
}
答案 0 :(得分:0)
在调用reloadData函数之前,你可以在addCell()函数的最后或开头使用一个guard语句来解决问题(取决于你是否想要执行所有逻辑,即使表还不存在): / p>
guard let tmpTable = table else {
return
}
你也可以使用:
if let tmpTable = table else {
tmpTable.reloadData()
}
这样,只有在您的表已经加载时才会调用导致问题的函数。 使用你的主类也有点奇怪,通常这个类不用于执行任何代码/逻辑,尝试使用正确的控制器。