I'm not sure where the error is here, having looked at other similar issues. I received an Assertion failure.
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: UITableView dataSource must return a cell from tableView:cellForRowAtIndexPath:
I think it is something simple but hope someone can help.
Below is my code:
#import "StockMarketViewController.h" @interface StockMarketViewController () @end @implementation StockMarketViewController @synthesize ShareNameText, ShareValueText, AmountText; @synthesize shares, shareValues; - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section; { return [shares count]; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath; { UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:@"cell"]; NSString *currentValue = [shareValues objectAtIndex:[indexPath row]]; [[cell textLabel]setText:currentValue]; return cell; }
you are never creating a cell, you just try to reuse a dequeued cell. but as you never created one, there is none.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath; { static NSString *cellIdentifier = @"cell"; UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; if (!cell) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier]; } NSString *currentValue = [shareValues objectAtIndex:[indexPath row]]; [[cell textLabel]setText:currentValue]; return cell; }
or try (only iOS 6+)
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath; { static NSString *cellIdentifier = @"cell"; UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath]; NSString *currentValue = [shareValues objectAtIndex:[indexPath row]]; [[cell textLabel]setText:currentValue]; return cell; }
from UITableView.h
- (id)dequeueReusableCellWithIdentifier:(NSString *)identifier; // Used by the delegate to acquire an already allocated cell, in lieu of allocating a new one. - (id)dequeueReusableCellWithIdentifier:(NSString *)identifier forIndexPath:(NSIndexPath *)indexPath NS_AVAILABLE_IOS(6_0); // newer dequeue method guarantees a cell is returned and resized properly, assuming identifier is registered
-dequeueReusableCellWithIdentifier:
will always need a check, if a cell was returned, while-dequeueReusableCellWithIdentifier:forIndexPath:
can instantiate new one.
If you have not defined a prototype cell with the identifier @"cell"
in Storyboard, you will get an assertion error when you attempt to dequeue it.
You can fix this by setting the Identifier
property on the prototype cell (select the cell and set that attribute in the right hand panel).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With