完整的深度开关声明故障

时间:2015-05-18 05:06:21

标签: ios uitableview swift xcode6 switch-statement

我之前曾问过这个问题,但我觉得我没有那么彻底。我试图以编程方式完成一个非常标准的向下钻取表视图层次结构,而不是使用IB来避免不必要的争夺,因为我有超过40个不同的视图我想实现。我决定使用以下switch语句:

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    var VC: UITableViewController
    switch indexPath.row {
    case 0: VC = SecondTableViewController()
    default: ()
    }
    navigationController?.pushViewController(VC, animated: true)
}

enter image description here

你可以看到它给了我非初始化的错误,所以我继续使我的变量成为可选的来修复这个问题&它编译并运行:

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    var VC: UITableViewController?
    switch indexPath.row {
    case 0: VC = SecondTableViewController()
    default: ()
    }
    navigationController?.pushViewController(VC!, animated: true)
}

enter image description here

然而,当我选择指定的行(在调试器下运行后,该值正确为0)时,它会因此错误而崩溃:

enter image description here

似乎是什么问题?它是我的开关中的默认语句吗?或者它是我的“pushViewController”方法中的变量?我可以添加,当我从“VC / VC!”更改此方法中的参数时像这样的“UITableViewController()”:

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    var VC: UITableViewController?
    switch indexPath.row {
    case 0: VC = SecondTableViewController()
    default: ()
    }
    navigationController?.pushViewController(UITableViewController, animated: true)
}

enter image description here

它运行&相应的函数,但是当按下视图时,它不是我在switch语句中指定的TableViewController,而是一个空白的表视图。我错过了什么?

这是我的SecondTableViewController的代码:

导入UIKit

class SecondTableViewController:UITableViewController {

var myVariable = ["LIST OF STRINGS IN AN ARRAY"]

override func viewDidLoad() {
    super.viewDidLoad()
}

 override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()

}



 override func numberOfSectionsInTableView(tableView: UITableView) -> Int {

    return 1
}

 override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

    return myVariable.count
}


override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("reuseIdentifier", forIndexPath: indexPath) as! UITableViewCell

    var superVariable = myVariable [indexPath.row]

    cell.textLabel!.text = superVariable


    return cell

}

}

1 个答案:

答案 0 :(得分:1)

问题在于SecondTableViewController,您没有为您的单元格定义标识符。你应该这样做,

class SecondTableViewController: UITableViewController {

    let theData = ["one", "two", "three", "four"]

    override func viewDidLoad() {
        super.viewDidLoad()
        tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "Cell")
    }


    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return theData.count
    }


    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! UITableViewCell
        cell.textLabel?.text = theData[indexPath.row]
        return cell
    }
}