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就会被释放.您必须保留对数据源的引用. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |