Swift-app在UITableView中的行选择上崩溃

时间:2015-05-04 20:15:43

标签: ios uitableview swift

我在Swift中遇到UITableView问题。 只要我没有实现用于处理单元格选择的委托函数,它就可以正常工作。

这是我非常简单的类,它充当表视图委托和数据源:

import UIKit

class TableViewService : NSObject, UITableViewDataSource, UITableViewDelegate {

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = UITableViewCell()

    if(indexPath.row == 0) {
        cell.textLabel?.text = "One"
    } else {
        cell.textLabel?.text = "Two"
    }

    cell.selectionStyle = .None

    return cell;
}

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return 2
}

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    log.debug("Row selceted")
}
}

当我在表视图中选择一行时,应用程序崩溃,并在objc_msgSend中出现EXEC_BAD_ACCESS错误 - 控制台中没有记录错误,如果我在didSelectRowAtIndexPath函数中放置了断点,则它永远不会被触发。

Crash screenshot

我缺少什么或做错了什么?

1 个答案:

答案 0 :(得分:2)

以下是我创建项目时没有遇到任何问题的步骤。也许它会帮助你错过某个地方的一步?:

1)在故事板中设置UITableView作为ViewController

的子视图

2)将代码添加到ViewController(您的自定义类)

class ViewController: UIViewController {

    @IBOutlet var tableView:UITableView!
    let tableService:TableViewService = TableViewService()

     override func viewDidLoad() {
         super.viewDidLoad()
         tableView.delegate = tableService
         tableView.dataSource = tableService
    }
}

3)确保插座连接在ViewControllertableView

之间

4)从上面的代码中复制/粘贴TableViewService课程(除了我使用的是println()而不是log.debug

如果我确定这三件事,那么我就能看到委托方法被调用而没有崩溃。