Reputation: 5427
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?
Upvotes: 0
Views: 693
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
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