Reputation: 618
This is either an XCode bug, or me missing a crucial rule here.
Update: - What's the chance of this being a weird bug in XCode/Storyboard?
Situation:
in "cellForRowAtIndexPath" I basically have:
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"NewCell"];
return cell;
This throws an exception:
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'UITableView dataSource must return a cell from tableView:cellForRowAtIndexPath:'
Things I have already tried:
I have a feeling it has something to do with the tree I built there, which is a TabBarController, loading a NavigationController, loading a TableViewController, providing a few items, one is clicked, which loads another TableViewController, which is unable to work with the custom cell, somehow.
Important:
- The issue is that the Storyboard should make sure that:
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"NewCell"];
will never return NIL (unlike without the Storyboard/iOS4). But, mine is nil. And I can't, for the hell of it, figure out what's happening.
Upvotes: 5
Views: 6401
Reputation: 3392
It maybe late to answer this but i bet this will fix all your problems
Upvotes: 0
Reputation: 116
Heyo, I just had this problem today and figured out a few possible causes. To link a UITableView as a subview of a ViewController in Story board check that you have done these steps.
In your "ViewController.h", add <UITableViewDataSource>
to your list
of protocols
@interface ViewController : UIViewController
<UITableViewDataSource>
you might want to add <UITableViewDelegate>
as well but I didn't.
In your "ViewController.m" set up your Table view data source functions
#pragma mark - Table view data source}- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { // Return the number of sections. return 1; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { // Return the number of rows in the section. return [yourCells count]; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { NewCell *cell = (NewCell *)[tableView dequeueReusableCellWithIdentifier:@"NewCell"]; if (cell == nil) { NSLog(@"Cell is NIL"); cell = [[CustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; } return cell;
In Storyboard, connect the UITableView's "Data Source" and "Delegate" references to the ViewController.
If these are done, I believe it should work.
Hope this helps =)
Upvotes: 2
Reputation: 21760
To solve this problem add the following just above your dequeueReusableCellWithIdentifier statement:
static NSString *CellIdentifier = @"NewCell";
making sure the identifier matches the prototype cell in Storyboard
Upvotes: 0
Reputation: 2261
I always use custom cells in the storyboard like this:
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
return cell;
Make sure the number of rows/sections is at least one. And another thing to check is that you set the UITableViewController to your custom class name in the storyboard.
Upvotes: 1
Reputation: 1642
Upvotes: 0