title: Debugging runtime error: 'NSInternalInconsistencyException', reason: 'UITableView dataSource must return a cell from tableView:cellForRowAtIndexPath'
body: <p>I'm going through the Beginning iPhone Development book &amp; stuck in chapter 9.  I've spent a few hours trying to debug this error without avail:</p>
  
  <pre><code>2010-05-01 19:27:51.361 Nav2[4113:20b] *** Assertion failure in -[UITableView _createPreparedCellForGlobalRow:withIndexPath:], /SourceCache/UIKit/UIKit-984.38/UITableView.m:4709
  2010-05-01 19:27:51.362 Nav2[4113:20b] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'UITableView dataSource must return a cell from tableView:cellForRowAtIndexPath:'
  2010-05-01 19:27:51.364 Nav2[4113:20b] Stack: (
   ...
  )
  </code></pre>
  
  <p>I'm not looking for help with the book, but tips for how to <em>debug</em> this error.  Can I pin down which of my <code>cellForRowAtIndexPath</code> methods is the problem?  And how to inspect the type?  Or other things should I look at?</p>
  
  <p><strong>Edit</strong>: As requested, the code for the two suspect methods:</p>
  
  <pre><code>-(UITableViewCell *)tableView:(UITableView *)tableView
          cellForRowAtIndexPath:(NSIndexPath *)indexPath {
  
      static NSString *RootViewControllerCell = @"RootViewControllerCell";
  
      UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:RootViewControllerCell];
      if (cell == nil) {
          cell == [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:RootViewControllerCell] autorelease];
      }
  
      NSUInteger row = [indexPath row];
      SecondLevelViewController *controller = [controllers objectAtIndex:row];
      cell.textLabel.text = controller.title;
      cell.image = controller.rowImage;
      return cell;
  }
  </code></pre>
  
  <p>--</p>
  
  <pre><code>- (UITableViewCell *)tableView:(UITableView *)tableView 
           cellForRowAtIndexPath:(NSIndexPath *)indexPath {
  
      static NSString * DisclosureButtonCellIdentifier = 
      @"DisclosureButtonCellIdentifier";
  
      UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier: 
                               DisclosureButtonCellIdentifier];
      if (cell == nil) {
          cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault 
                                         reuseIdentifier: DisclosureButtonCellIdentifier]
                  autorelease];
      }
      return cell;
  
      NSUInteger row = [indexPath row];
      NSString *rowString = [list objectAtIndex:row];
      cell.textLabel.text = rowString;
      cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton;
      [rowString release];
      return cell;
  }
  </code></pre>