简体   繁体   中英

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:

在此处输入图片说明

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?

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

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!

}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM