sin*_*ina 1 xcode uitableview ios swift
我有一个奇怪的问题.我试图以编程方式将dataSource分配给表.
我UITableView使用Interface Builder在ViewController中为它创建了一个和一个IBOutlet.我创建了一个实现的类UITableViewDataSource.我将dataSource我的表设置为dataSource的一个实例.Everything编译并运行正常,直到设置dataSource的行在运行时执行.
错误是,Thread 1: EXC_BAD_ACCESS (code=EXC_i386_GPFLT)并class 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
}
}
Run Code Online (Sandbox Code Playgroud)
任何想法为什么我得到这个运行时错误?我正在使用Swift的XCode 6 beta 4.
Raf*_*fAl 14
将您的代码更改为:
class ViewController: UIViewController
{
@IBOutlet weak var table: UITableView!
var dataSource: MyData?
override func viewDidLoad()
{
super.viewDidLoad()
dataSource = MyData()
table.dataSource = dataSource!
}
}
Run Code Online (Sandbox Code Playgroud)
您的应用程序会中断,因为ds一旦viewDidLoad返回就会释放.您必须保留对数据源的引用.