damianesteban
damianesteban

Reputation: 1611

iOS8 Swift - Table View - Controller does not conform to protocol UITableViewDataSource

I added another model to my database, and I am essentially re-creating the same methods for this model as the previous one, however this time around I am getting the following error:

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

EDIT: I'm also getting these errors, but again, I don't see where the issue is:

/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

Here is my 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
    }

 }

Here is the 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
    }

}

I must be overlooking something relatively simple, but I just don't see it and I've been struggling with this for hours. Any suggestions would be much appreciated. Thank you.

Upvotes: 1

Views: 1281

Answers (2)

Kumar Nitin
Kumar Nitin

Reputation: 1863

The are few things in the above code I would like to point out.

  1. In cellForRowAtIndexPath method, you are using the cell identifier as "Cell", make sure you are using the same name in Storyboard and its unique across the project.
  2. In cellForRowAtIndexPath method, brackets are not rightly marked

Try writing the following line for your cell:

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

Note: Make sure you rename identifier in the storyboard too.

Upvotes: 1

Jarod
Jarod

Reputation: 495

I think you should add override:

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


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

Upvotes: 1

Related Questions