我有一个奇怪的问题。我试图以编程方式将dataSource分配给表。
我已UITableView使用界面生成器在ViewController中为其创建了一个和IBOutlet。我创建了一个实现的类UITableViewDataSource。我将dataSource表的设置为dataSource的实例。一切都会编译并正常运行,直到设置dataSource的行在运行时执行。
UITableView
UITableViewDataSource
dataSource
错误是Thread 1: EXC_BAD_ACCESS (code=EXC_i386_GPFLT)并且class AppDelegate定义线突出显示。
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 } }
有什么想法为什么我得到这个运行时错误?我正在Swift中使用XCode 6 beta 4。
将您的代码更改为:
class ViewController: UIViewController { @IBOutlet weak var table: UITableView! var dataSource: MyData? override func viewDidLoad() { super.viewDidLoad() dataSource = MyData() table.dataSource = dataSource! } }
您的应用程序中断,因为返回时会ds立即将其释放viewDidLoad。您必须保留对数据源的引用。
ds
viewDidLoad