2015-04-04 5 views
1

Я добавил еще одну модель в свою базу данных, и я по существу пересоздал те же методы для этой модели, что и предыдущий, однако на этот раз я получаю следующее сообщение об ошибке:iOS8 Swift - Table View - Контроллер не соответствует протоколу UITableViewDataSource

ContactsDetailViewController.swift:11:1: Type 'ContactsDetailViewController' does not conform to protocol 'UITableViewDataSource'

EDIT: Я также получаю эти ошибки, но опять же, я не вижу, где вопрос:

/Volumes/BigMan/Code/Swift/BackpackerSpots/UIKit.UITableViewDataSource:3:48: Protocol requires function 'tableView(_:cellForRowAtIndexPath:)' with type '(UITableView, cellForRowAtIndexPath: NSIndexPath) -> UITableViewCell'

/Volumes/BigMan/Code/Swift/BackpackerSpots/BackpackerSpots/ContactsDetailViewController.swift:14:19: Candidate is not a function

Вот мой ContactsDetailViewController:

import UIKit 

class ContactsDetailViewController: UIViewController, UITableViewDataSource, 
    UITableViewDelegate { 
    @IBOutlet var tableView:UITableView! 

    var contact:Contact? 


    override func viewDidLoad() { 
     super.viewDidLoad() 

     // customizing background of tableview 
     self.tableView.backgroundColor = UIColor(red: 240.0/255.0, green: 240.0/255.0, blue: 240.0/255.0, alpha: 0.2) 

     // remove extra separators 
     self.tableView.tableFooterView = UIView(frame: CGRectZero) 

     // change the color of the separator 
     self.tableView.separatorColor = UIColor(red: 240.0/255.0, green: 240.0/255.0, blue: 240.0/255.0, alpha: 0.8) 

     // self-sizing cells 
     tableView.estimatedRowHeight = 36.0 
     tableView.rowHeight = UITableViewAutomaticDimension 

    } 


    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

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

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: 
     NSIndexPath) -> UITableViewCell { 

      let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as ContactsDetailTableViewCell 
      // make cell transparent so background color can be seen 
      cell.backgroundColor = UIColor.clearColor() 


      switch indexPath.row { 
      case 0: 
       cell.fieldLabel.text = "Name" 
       cell.valueLabel.text = contact?.contactName 
      case 1: 
       cell.fieldLabel.text = "Email" 
       cell.valueLabel.text = contact?.contactEmail 
       cell.mapButton.hidden = false 
      default: 
       cell.fieldLabel.text = "" 
       cell.valueLabel.text = "" 

      } 

      return cell 
    } 

} 

Вот ContactsDetailTableViewCell:

import UIKit 

class ContactsDetailTableViewCell: UITableViewCell { 
    @IBOutlet weak var fieldLabel:UILabel! 
    @IBOutlet weak var valueLabel:UILabel! 

    override func awakeFromNib() { 
     super.awakeFromNib() 
     // Initialization code 
    } 

    override func setSelected(selected: Bool, animated: Bool) { 
     super.setSelected(selected, animated: animated) 

     // Configure the view for the selected state 
    } 

} 

Я должен быть видом что-то относительно простой, но я просто не вижу, и я был борясь с этим часами. Любые предложения будут высоко ценится. Спасибо.

ответ

1

несколько вещей в приведенном выше коде, я хотел бы отметить.

  1. В методе cellForRowAtIndexPath, вы используете идентификатор соты, как «Cell», убедитесь, что вы используете один и тот же имя в раскадровке и его уникальный по проекту.
  2. В методе cellForRowAtIndexPath, скобки не справедливо отмечены

Попробуйте написать следующую строку для ячейки:

let cell : ContactsDetailTableViewCell = tableView.dequeueReusableCellWithIdentifier("ContactsDetailTableViewCell", forIndexPath: indexPath) as ContactsDetailTableViewCell 

Примечание: Убедитесь, что вы переименовать идентификатор в раскадровке тоже.

+0

Спасибо, вот что на самом деле. – damianesteban

1

Я думаю, вы должны добавить override:

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
} 


override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
} 
Смежные вопросы