2016-10-15 74 views
0

從頭開始一個Xcode項目。選擇單個視圖選項。在視圖中放置在桌面上。選定1個細胞原型。創建一個單元格標識符「單元格」。添加了滿足tableview協議所需的UITableViewDelegate和函數。 tableview鏈接到視圖控制器。該代碼沒有預運行錯誤或警告。不過,我得到這個錯誤:Swift - tableview加載錯誤 - 可怕的SIGBART

2016-10-15 07:50:29.622 LawDataNHC[5219:196567] * Assertion failure in -[UITableView _configureCellForDisplay:forIndexPath:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim/UIKit-3599.6/UITableView.m:8035 2016-10-15 07:50:29.650 LawDataNHC[5219:196567] * Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'UITableView (; layer = ; contentOffset: {0, 0}; contentSize: {375, 44}>) failed to obtain a cell from its dataSource()' *** First throw call stack:

材料實現代碼如下代碼:

class ViewController: UIViewController, UITableViewDelegate { 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 
    } 

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return 1  
    } 

    func numberOfSections(in tableView: UITableView) -> Int { 
     return 1 
    } 

    private func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 

     let cell = UITableViewCell(style: .default, reuseIdentifier: "cell") 

     cell.textLabel?.text = "test" 

     return cell 
    } 
+0

你設置你的視圖控制器的表視圖的數據源?你的代碼也不會使用你的原型單元,因爲你只是實例化一個UITableViewCell。您需要使用'dequeueReusableCellWithIdentifier'來使用原型單元 – Paulw11

+0

我沒有將視圖控制器設置爲表視圖委託和數據源。下面的hagfish提供的dequeReusableCell(withIdentifier:「cell」)解決方案也不起作用。這使我像過去一樣瘋狂(Swift 2)我用其他的表格使用了精確的代碼。 –

回答

1

你」已經忘記命名協議UITableViewDataSource您的ViewController

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { 

而且你cellForRowAt方法不應該是私有的:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 

最後嘗試使用dequeueReusableCell方法生成的細胞,而不是與UITableViewCell(style: .default, reuseIdentifier: "cell")創造新的。

ViewController類應該如下所示:

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { 
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return 1 
    } 

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    //let cell = UITableViewCell(style: .default, reuseIdentifier: "cell") 
    let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) 

    cell.textLabel?.text = "test" 

    return cell 
    } 
} 
+0

好悲傷......我會繼續我的日常工作。這是UITableViewDataSource的遺漏。謝謝Balderrama先生。我頭上還有毛。 –

+0

:) @ P.Festus很高興它幫助你! – Wilson

0

您的代碼返回nil的tableView細胞嘗試以下操作: 用它替換:

private func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 

    let cell = tableView.dequeueReusableCell(withIdentifier: "cell") 

    cell.textLabel?.text = "test" 

    return cell 
    } 
+0

在這種方法中,表視圖實例可以**不會**爲'nil'。 – vadian

+0

是的,正確..糾正。 – jagdish