Vicarious
Vicarious

Reputation: 129

dequeueReusableCell returns empty cell after table initialization

I have a table view that is initialized with three rows when loaded. Later, I want to extract cell data (from labels) and use it when that specific cell is selected by the user.

Even though initialization works well and I can see all the data being displayed, the dequeueReusableCell in the didSelectRowAt methods returns empty cells, with no data.

What is the problem?

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    guard let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as? ArticleTableViewCell else {
        fatalError("Whoopse, dequeueing the cell failed")
    }
    let title = cell.articleLabel.text
    // Do other stuff

}

The title variable above will be empty, even though it's data is shown on the display.

Upvotes: 0

Views: 311

Answers (1)

Shehata Gamal
Shehata Gamal

Reputation: 100503

Replace

guard let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as? ArticleTableViewCell else {
    fatalError("Whoopse, dequeueing the cell failed")
}

with ( not recommended )

guard let cell = tableView.cellForRow(at:indexPath) as? ArticleTableViewCell else {
    fatalError("Whoopse, dequeueing the cell failed")
}

but ##better## is to access the data source array with the clicked index

let item = arr[indexPath.row]

Upvotes: 1

Related Questions