2015-12-17 2 views
0

Это мой кодтипа TypeViewOne не соответствует протоколу UITableViewDataSource

class TableViewOne: UITableViewDataSource, UITableViewDelegate { 


    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCellWithIdentifier("firstCell") as! firstCell 
     let index = indexPath.row 
     cell.labelMy.text = ViewController.firstData![index] 
     return cell 

    } 

    override func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
     return 1 
    } 

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     if let s = ViewController.firstData { 
      return s.count 
     } 
     return 0 
    } 

} 

Я не знаю, почему на этот раз я получаю эту ошибку, хотя, когда я использую подкласс UITableViewController тех, будет достаточно, звучит как UITableViewControlelr реализован для других необходимых функций, но я не мог знать их сам.

+0

Это похоже синтаксис «старый-быстрому». Каков ваш класс «TableViewOne», не может ли он быть «UITableViewController»? Если это так, замените заголовок класса 'class TableViewOne: UITableViewController {...'. – dfri

+0

Принимая удар в темноте здесь, но будет ли он работать, если TableViewOne расширяет UIView? например 'class TableViewOne: UIView, UITableViewDataSource, UITableViewDelegate' –

ответ

1

UITableViewDataSource требует, чтобы вы соответствовали протоколу NSObject, который TableViewOne, класс чистого быстродействия, не соответствует. Измените объявление, чтобы наследовать от NSObject, как это:

class TableViewOne: NSObject, UITableViewDataSource, UITableViewDelegate 

Во-вторых, вам не нужно override ключевое слово, потому что TableViewOne не подклассов другой объект. UITableViewController имеет реализацию по умолчанию для возврата 1, но поскольку вы не являетесь подклассом UITableViewController, у вас нет способа переопределить.

override func numberOfSectionsInTableView(tableView: UITableView) -> Int 

против

func numberOfSectionsInTableView(tableView: UITableView) -> Int 
0

Убедитесь, что вы потащили datasource и delegate от storyboard или xib вашего класса. То же самое, как это:

enter image description here

Datasource сделает ваш класс соответствовать: cellForRowAtIndexPath, numberOfSection, numberRowInSection.

0

кажется, что вы приняли UIViewController в раскадровка & добавил UITableView к нему, если тот случай, то подкласс UIViewController & изменить свой класс, как это

class TableViewOne: UIViewController,UITableViewDataSource, UITableViewDelegate { 

Если вы приняли TableViewController в раскадровке, тогда вам нужно подклассы только UITableViewController

class TableViewOne: UITableViewController{ 

& вам нужно только добавить следующие функции для подтверждения Tableview источника данных

override func numberOfSectionsInTableView(tableView: UITableView) -> Int { 

    return 0 
} 

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 

    return 0 
} 
Смежные вопросы