Unable to dequeue a cell with identifier Cell - must register a nib or a class for the identifier or connect a prototype cell in a storyboard? Unable to dequeue a cell with identifier Cell - must register a nib or a class for the identifier or connect a prototype cell in a storyboard? xcode xcode

Unable to dequeue a cell with identifier Cell - must register a nib or a class for the identifier or connect a prototype cell in a storyboard?


If you create the table view programmatically, and you're just using the default UITableViewCell, then you should register the class (in viewDidLoad is a good place). You can also do this for a custom class, but only if you create the cell (and its subviews) in code (use registerNib:forCellWithReuseIdentifier: if the cell is made in a xib file).

[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"Cell"];

However, this will only give you a "Basic" table view cell with no detailTextLabel. To get that type of cell, you should use the shorter dequeue method, dequeueReusableCellWithIdentifier:, which doesn't throw an exception if it doesn't find a cell with that identifier, and then have an if (cell == nil) clause to create the cell,

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {    static NSString *CellIdentifier = @"Cell";    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];    if (cell == nil) {        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];    }    //Configure cell   return cell;}


Please, if you're using a custom class for your cell check that you've already registered the nib for the cell to use in your table view, as follow:

[self.yourTableViewName registerNib:[UINib nibWithNibName:@"YourNibName" bundle:nil]         forCellWithReuseIdentifier:@"YourIdentifierForCell"];

Apart from that please check that your custom UITableViewCell subclass has the appropiate reuse identifier.

If you're not using a custom class, please follow this instructions from Apple Docs:

The data source, in its implementation of the tableView:cellForRowAtIndexPath: method, returns a configured cell object that the table view can use to draw a row. For performance reasons, the data source tries to reuse cells as much as possible. It first asks the table view for a specific reusable cell object by sending it a dequeueReusableCellWithIdentifier:

For complete information, please go to this link: Creating a Table View Programmatically.

I hope this helps!


The reason for the crash is that you are using

[tableView dequeueReusableCellWithIdentifier: forIndexPath:]

which will cause a crash unless you specify a cell or nib file to be used for the cell.

To avoid the crash, use the following line of code instead

[tableView dequeueReusableCellWithIdentifier:];

This line of code will return nil if there is not a cell that can be used.

You can see the difference within the docs which can be found here.

There is also a good answer to a Q&A that can be found here