title: Trying to debug error: *** Assertion failure in -[UITableView _createPreparedCellForGlobalRow:withIndexPath:]
body: <p>I have a simple UITableviewController that used to work fine and now something has broken it.. 
  It presents a simple form that allows me to add a simple 3-field record to a core-data managed object.</p>
  
  <p>When I add a record, it should return to the table and display the contents.  I can see that it is writing the record to the database but the table is empty and the error below appears.  I can keep adding records by clicking on my "Add" button but each time I save the new record and return to the table, it is empty.</p>
  
  <p>The complete error I see is this..</p>
  
  <pre><code>*** Assertion failure in -[UITableView _createPreparedCellForGlobalRow:withIndexPath:], /SourceCache/UIKit_Sim/UIKit-1448.89/UITableView.m:5678
  2011-10-01 22:48:11.860 Gradetrack[59617:207] Serious application error.  An exception was caught from the delegate of NSFetchedResultsController during a call to -controllerDidChangeContent:.  UITableView dataSource must return a cell from tableView:cellForRowAtIndexPath: with userInfo (null)
  </code></pre>
  
  <p>If I stop the simulator and restart it, I can see from my NSLog statements that it has discovered the right number of records from the database and has tried to load the table but at this point, I get this similar error and the stack trace below.</p>
  
  <pre><code>2011-10-01 23:08:50.332 Gradetrack[59795:207] &gt;&gt;&gt; Enumber of courses entered thus far: 4 
  2011-10-01 23:08:50.334 Gradetrack[59795:207] *** Assertion failure in -[UITableView _createPreparedCellForGlobalRow:withIndexPath:], /SourceCache/UIKit_Sim/UIKit-1448.89/UITableView.m:5678
  2011-10-01 23:08:50.337 Gradetrack[59795:207] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'UITableView dataSource must return a cell from tableView:cellForRowAtIndexPath:'
  *** Call stack at first throw:
  (
      0   CoreFoundation                      0x00fd05a9 __exceptionPreprocess + 185
      1   libobjc.A.dylib                     0x01124313 objc_exception_throw + 44
      2   CoreFoundation                      0x00f88ef8 +[NSException raise:format:arguments:] + 136
      3   Foundation                          0x000e43bb -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 116
      4   UIKit                               0x0035ec91 -[UITableView(UITableViewInternal) _createPreparedCellForGlobalRow:withIndexPath:] + 883
      5   UIKit                               0x003544cc -[UITableView(UITableViewInternal) _createPreparedCellForGlobalRow:] + 75
      6   UIKit                               0x003698cc -[UITableView(_UITableViewPrivate) _updateVisibleCellsNow:] + 1561
      7   UIKit                               0x0036190c -[UITableView layoutSubviews] + 242
      8   QuartzCore                          0x01f70a5a -[CALayer layoutSublayers] + 181
      9   QuartzCore                          0x01f72ddc CALayerLayoutIfNeeded + 220
      10  QuartzCore                          0x01f180b4 _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 310
      11  QuartzCore                          0x01f19294 _ZN2CA11Transaction6commitEv + 292
      12  UIKit                               0x002eb9c9 -[UIApplication _reportAppLaunchFinished] + 39
      13  UIKit                               0x002ebe83 -[UIApplication _runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:] + 690
      14  UIKit                               0x002f6617 -[UIApplication handleEvent:withNewEvent:] + 1533
      15  UIKit                               0x002eeabf -[UIApplication sendEvent:] + 71
      16  UIKit                               0x002f3f2e _UIApplicationHandleEvent + 7576
      17  GraphicsServices                    0x01928992 PurpleEventCallback + 1550
      18  CoreFoundation                      0x00fb1944 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 52
      19  CoreFoundation                      0x00f11cf7 __CFRunLoopDoSource1 + 215
      20  CoreFoundation                      0x00f0ef83 __CFRunLoopRun + 979
      21  CoreFoundation                      0x00f0e840 CFRunLoopRunSpecific + 208
      22  CoreFoundation                      0x00f0e761 CFRunLoopRunInMode + 97
      23  UIKit                               0x002eb7d2 -[UIApplication _run] + 623
      24  UIKit                               0x002f7c93 UIApplicationMain + 1160
      25  Gradetrack                          0x00002034 main + 102
      26  Gradetrack                          0x00001fc5 start + 53
  </code></pre>
  
  <p>Based on NSLog statements, this is the last subroutine executed.</p>
  
  <pre><code>- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
      // Return the number of rows in the section.
      NSLog(@"&gt;&gt;&gt; Enteringg %s [Line %d] ", __PRETTY_FUNCTION__, __LINE__);   
  
      id &lt;NSFetchedResultsSectionInfo&gt; sectionInfo = 
      [[_fetchedResultsController sections] objectAtIndex:section];
      NSLog(@"&gt;&gt;&gt; Enumber of courses entered thus far: %d ", [sectionInfo numberOfObjects]);  
  
      return [sectionInfo numberOfObjects];
  }
  </code></pre>
  
  <p>Note: the output from the Number of courses entered thus far...   was 4, which was correct.</p>
  
  <p>Here is where I return cells back to the UITableViewController</p>
  
  <pre><code>- (UITableViewCell *)tableView:(UITableView *)tableView atIndexPath:(NSIndexPath *)indexPath {
      NSLog(@"&gt;&gt;&gt; Entering %s [Line %d] ", __PRETTY_FUNCTION__, __LINE__);    
  
      static NSString *CellIdentifier = @"Cell";
  
      UITableViewCell *cell = 
      [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
      if (cell == nil) {
          cell = [[[UITableViewCell alloc] 
                   initWithStyle:UITableViewCellStyleSubtitle 
                   reuseIdentifier:CellIdentifier] autorelease];
      }
  
      // Set up the cell...
      [tableView setAllowsSelectionDuringEditing:NO];
      [self configureCell:cell atIndexPath:indexPath];
      // load the cell with an appropriate image
      NSString *path = [[NSBundle mainBundle] pathForResource:@"studentprofile" ofType:@"png"];
      UIImage *theImage = [UIImage imageWithContentsOfFile:path];
      cell.imageView.image = theImage;
  
      return cell;
  }
  </code></pre>
  
  <p>Based on these errors and my stack trace, can anyone point me in the right direction?</p>
  
  <p>Many thanks, </p>
  
  <p>Phil</p>