我可以显示几行表格,但是当我点击其中的一行时,应用程序在tableView.setNumberOfRows(:)
崩溃
我对发生的事情一无所知。欢迎任何建议或技巧。预先感谢。
我不明白为什么会这样,因为在初始设置时,此代码运行时没有错误。我只有在点击表格行之一时才会收到此错误。
import WatchKit
import Foundation
class InterfaceController: WKInterfaceController {
@IBOutlet var tableView: WKInterfaceTable!
override func awake(withContext context: Any?) {
super.awake(withContext: context)
// Configure interface objects here.
loadTableData()
}
override func willActivate() {
// This method is called when watch view controller is about to be visible to user
super.willActivate()
}
override func didDeactivate() {
// This method is called when watch view controller is no longer visible
super.didDeactivate()
}
private func loadTableData() {
tableView.setNumberOfRows(Categories.NotLocalizedCategories.count, withRowType: "RowController")
for (index, category) in Categories.LocalizedCategories.enumerated() {
if let rowController = tableView.rowController(at: index) as? RowController {
rowController.rowLabel.setText(category)
}
}
}
override func table(_ table: WKInterfaceTable, didSelectRowAt rowIndex: Int) {
pushController(withName: "DetailInterfaceController", context: Categories.LocalizedCategories[rowIndex])
}
}
答案 0 :(得分:0)
显然,tableView
或上下文Categories.LocalizedCategories[rowIndex]
为零。在传递上下文之前,请使用if let
构造或guard
语句。
答案 1 :(得分:0)
之所以发生这种情况,是因为 DetailInterfaceController 类(更确切地说是在awake
方法中)被称为super.awake
,而这样做是 InterfaceController 将再次实例化strong>类,并执行其中的awake
和其中的所有内容。由于情节提要的表引用很弱,因此其表实例将为null,然后崩溃。一种解决方法是从您推送的控制器中删除super.awake
。