SagittariusA
SagittariusA

Reputation: 5427

Swift: unable to dequeue a cell with identifier in tables with sections

In my iOS app I have a table with 4 sections. I created a subtitle cell for each section and each cell has got its own identifier as you can see from the screenshot:

enter image description here

The problem is that when I need to insert a cell in that section by creating it with its identifier, I get am exception saying 'unable to dequeue a cell with identifier ... ' Here's my method:

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

        var cell:UITableViewCell?
        var selectedStatus:String

        switch indexPath.section {
        case 0:
            let cell = tableView.dequeueReusableCellWithIdentifier("OpenTasks",
                forIndexPath: indexPath) as! UITableViewCell
            selectedStatus = "Aperti"
            break
        case 1:
            let cell = tableView.dequeueReusableCellWithIdentifier("ClosedTasks",
                forIndexPath: indexPath) as! UITableViewCell
            selectedStatus = "Chiusi"
            break
        case 2:
            let cell = tableView.dequeueReusableCellWithIdentifier("ExpiredTasks",
                forIndexPath: indexPath) as! UITableViewCell
            selectedStatus = "Scaduti"
            break
        case 3:
            let cell = tableView.dequeueReusableCellWithIdentifier("SuspendedTasks",
                forIndexPath: indexPath) as! UITableViewCell
            selectedStatus = "Sospesi"
            break
        default:
            let cell = tableView.dequeueReusableCellWithIdentifier("",
                forIndexPath: indexPath) as! UITableViewCell
            selectedStatus = ""
            break

        }

        let task = self.organizedTasks.items[selectedStatus]![indexPath.row]
        cell?.textLabel?.text = task.titolo
        cell?.detailTextLabel?.text = task.priorita
        return cell!

}

I don't know what I am missing... Can you help?

Upvotes: 0

Views: 693

Answers (2)

D4ttatraya
D4ttatraya

Reputation: 3404

You are making mistake in you code by using let to every cell variable.

This is right way to do it:

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

    var cell:UITableViewCell?
    var selectedStatus:String

    switch indexPath.section {
    case 0:
        cell = tableView.dequeueReusableCellWithIdentifier("OpenTasks",
            forIndexPath: indexPath) as! UITableViewCell
        selectedStatus = "Aperti"
        break
    case 1:
        cell = tableView.dequeueReusableCellWithIdentifier("ClosedTasks",
            forIndexPath: indexPath) as! UITableViewCell
        selectedStatus = "Chiusi"
        break
    case 2:
        cell = tableView.dequeueReusableCellWithIdentifier("ExpiredTasks",
            forIndexPath: indexPath) as! UITableViewCell
        selectedStatus = "Scaduti"
        break
    case 3:
        cell = tableView.dequeueReusableCellWithIdentifier("SuspendedTasks",
            forIndexPath: indexPath) as! UITableViewCell
        selectedStatus = "Sospesi"
        break
    default:
        cell = tableView.dequeueReusableCellWithIdentifier("",
            forIndexPath: indexPath) as! UITableViewCell
        selectedStatus = ""
        break

    }

    let task = self.organizedTasks.items[selectedStatus]![indexPath.row]
    cell?.textLabel?.text = task.titolo
    cell?.detailTextLabel?.text = task.priorita
    return cell!

}

Upvotes: 2

Devster101
Devster101

Reputation: 578

Well first of all, This looks like a disaster of an approach to using a tableview. Secondly, your first identifier in the screenshot is OpenTask (singular), but your code is looking for OpenTasks (plural).

Hope this helps

Upvotes: 2

Related Questions