有中断错误线程1:EXC_BAD_INSTRUCTION(代码= EXC_1386_INVOP,子代码== 0x0)。没有构建错误,只是在运行时,有休息
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if let calendars = self.calendars {
return calendars.count
}
return 0
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell")!
//错误发生在这里
if self.calendars != nil {
let calendarName = self.calendars?[(indexPath as NSIndexPath).row].title
cell.textLabel?.text = calendarName
} else {
cell.textLabel?.text = "Unknown Calendar Name"
}
return cell
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let destinationVC = segue.destination as! UINavigationController
let addCalendarVC = destinationVC.viewControllers[0] as! AddCalendarViewController
addCalendarVC.delegate = self
}
func calendarDidAdd() {
self.loadCalendars()
self.refreshTableView()
}
}
答案 0 :(得分:1)
tableView.dequeueReusableCell(withIdentifier: "Cell")!
您正在展开可选的值,该值可能首先为nil
。单元格可能尚未创建,特别是如果您尚未使用该标识符注册该单元格的类,那么它会在第一次表格尝试填充单元格时崩溃。您应首先检查单元格是否为nil
:
var cell = tableView.dequeueReusableCell(withIdentifier: "Cell")
if cell == nil {
cell = UITableViewCell(style: .default, reuseIdentifier: "Cell")
}
...
答案 1 :(得分:0)
我看到的直接红旗在这里:
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell")!
当出列可重复使用的单元格时,我喜欢将它们包装在保护语句中,因此我的应用程序不会崩溃。当出现问题时,它还会告诉我更多信息:
guard let cell = tableView.dequeueReusableCell(withIdentifier: "Cell") else {
print("couldn't dequeue a reusable cell for identifier Cell in \(#function)")
return UITableViewCell()
}
这次崩溃可能有几个原因。您可能忘记注册重用标识符,但如果您使用的是故事板,则会为您处理。可能只是输入错误或者您忘记输入该单元格的重用标识符。