Swift子类化UITableViewDataSource EXC_BAD_ACCESS

时间:2014-07-22 12:42:07

标签: uitableview swift subclass

我正在尝试子类化我的UITableViewDatasource, 但是,我的应用程序与EXC_BAD_ACCESS崩溃。 没有解释没有错误消息只是崩溃。 我的DataSource的排序版本看起来像这样。

import UIKit

class DataSource :NSObject, UITableViewDataSource{

var tableView:UITableView
let CellIdentifier = "Cell"

init(tableView : UITableView) {
    println("Data Source")
    self.tableView = tableView
    super.init()
    self.tableView.dataSource = self
}

//:MARK UITableViewDataSource
//-----------------------------------------------------------------------------------------//
// Number Of Rows In Tableview
//-----------------------------------------------------------------------------------------//
func tableView(tableView: UITableView?, numberOfRowsInSection section: Int) -> Int
{

    return 10
}
//-----------------------------------------------------------------------------------------//
// Cell For Row At Index Path
//-----------------------------------------------------------------------------------------//
func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! {
    let cell = self.tableView.dequeueReusableCellWithIdentifier(CellIdentifier, forIndexPath: indexPath) as UITableViewCell
    cell.textLabel.text = "Title of Row: #\(indexPath.row)"
    return cell
}  

 }

正如您所见,没有什么特别之处,此代码在Playground中运行良好

以下是我对DataSource的调用

import UIKit

class ListEntriesViewController :UITableViewController{


override func viewDidLoad() {
    println("View Did Load")
    var data = DataSource(tableView: self.tableView)
    self.tableView.dataSource = data

}

}

我错过了什么,为什么这段代码适用于Playground但不适用于我的应用程序。

谢谢

1 个答案:

答案 0 :(得分:2)

表视图不保留数据源。 viewDidLoad后立即销毁该对象。您需要将其存储在属性中。

另请注意, UITableViewDataSource 是协议,而不是类。因此它不能被子类化。