加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ios – 如何以编程方式设置UITableView的dataSource?

发布时间:2020-12-15 01:49:23 所属栏目:百科 来源:网络整理
导读:我有一个奇怪的问题.我试图以编程方式将dataSource分配给表. 我使用Interface Builder在ViewController中为它创建了一个UITableView和一个IBOutlet.我创建了一个实现UITableViewDataSource的类.我将我的表的dataSource设置为dataSource的一个实例. Everythin
我有一个奇怪的问题.我试图以编程方式将dataSource分配给表.

我使用Interface Builder在ViewController中为它创建了一个UITableView和一个IBOutlet.我创建了一个实现UITableViewDataSource的类.我将我的表的dataSource设置为dataSource的一个实例. Everything编译并运行正常,直到设置dataSource的行在运行时执行.

错误是线程1:EXC_BAD_ACCESS(代码= EXC_i386_GPFLT),并突出显示AppDelegate类定义行.

class ViewController: UIViewController {

    @IBOutlet weak var table: UITableView!

    override func viewDidLoad() {
        let ds = MyData()
        table.dataSource = ds // <---- Runtime error
        table.reloadData()
        super.viewDidLoad()
    }
    // ... other methods
}


class MyData: NSObject,UITableViewDataSource {
    func tableView(tableView: UITableView!,numberOfRowsInSection section: Int) -> Int {
        return 5
    }
    func tableView(tableView: UITableView!,cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! {
        let cell = UITableViewCell()
        cell.textLabel.text = "a row"
        return cell
    }
}

任何想法为什么我得到这个运行时错误?我正在使用XCode 6 beta 4和Swift.

解决方法

将您的代码更改为:

class ViewController: UIViewController 
{
    @IBOutlet weak var table: UITableView!
    var dataSource: MyData?

    override func viewDidLoad() 
    {
        super.viewDidLoad()

        dataSource = MyData()
        table.dataSource = dataSource!
    }
}

您的应用会中断,因为一旦viewDidLoad返回,ds就会被释放.您必须保留对数据源的引用.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读