点击WatchKit表行时崩溃

时间:2018-09-05 13:36:39

标签: swift watchkit

我可以显示几行表格,但是当我点击其中的一行时,应用程序在tableView.setNumberOfRows(:)崩溃 我对发生的事情一无所知。欢迎任何建议或技巧。预先感谢。

The error 我不明白为什么会这样,因为在初始设置时,此代码运行时没有错误。我只有在点击表格行之一时才会收到此错误。

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])
 }
}

2 个答案:

答案 0 :(得分:0)

显然,tableView或上下文Categories.LocalizedCategories[rowIndex]为零。在传递上下文之前,请使用if let构造或guard语句。

答案 1 :(得分:0)

之所以发生这种情况,是因为 DetailInterfaceController 类(更确切地说是在awake方法中)被称为super.awake,而这样做是 InterfaceController 类,并执行其中的awake和其中的所有内容。由于情节提要的表引用很弱,因此其表实例将为null,然后崩溃。一种解决方法是从您推送的控制器中删除super.awake