Fehler beim Debuggen versuchen: *** Assertionsfehler in - [UITableView _createPreparedCellForGlobalRow: withIndexPath:]
Habe ich eine einfache UITableviewController, die gut funktioniert haben und nun etwas gebrochen hat..
Es stellt eine einfache form, die mir erlaubt, fügen Sie eine einfache 3-Feld Datensatz zu einer core-data managed object.
Wenn ich einen Datensatz hinzufügen, es sollte die Rückkehr zu der Tabelle und den Inhalt anzuzeigen. Ich kann sehen, dass es ist das schreiben des Datensatzes in die Datenbank, aber die Tabelle ist leer, und die folgenden Fehlermeldung wird angezeigt. Ich kann halten Sie das hinzufügen von Datensätzen durch einen Klick auf meine Schaltfläche "Hinzufügen", aber jedes mal, wenn ich speichern Sie den neuen Datensatz und kehren Sie zu der Tabelle, es ist leer.
Den kompletten Fehler den ich sehe, ist diese..
*** 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)
Wenn ich beenden Sie den simulator und starten Sie es, sehen kann ich von meinem NSLog-Anweisungen, die es entdeckt hat die richtige Anzahl der Datensätze aus der Datenbank und versucht hat, das laden der Tabelle, aber an diesem Punkt, ich bekomme eine ähnliche Fehlermeldung und stack trace unten.
2011-10-01 23:08:50.332 Gradetrack[59795:207] >>> 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
Basierend auf der NSLog-Anweisungen, dies ist der Letzte Unterprogramm ausgeführt.
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
//Return the number of rows in the section.
NSLog(@">>> Enteringg %s [Line %d] ", __PRETTY_FUNCTION__, __LINE__);
id <NSFetchedResultsSectionInfo> sectionInfo =
[[_fetchedResultsController sections] objectAtIndex:section];
NSLog(@">>> Enumber of courses entered thus far: %d ", [sectionInfo numberOfObjects]);
return [sectionInfo numberOfObjects];
}
Hinweis: die Ausgabe aus der Anzahl der Kurse eingetragen so weit... 4 war, das war richtig.
Hier ist, wo ich zurückkehren Zellen zurück zu den UITableViewController
- (UITableViewCell *)tableView:(UITableView *)tableView atIndexPath:(NSIndexPath *)indexPath {
NSLog(@">>> 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;
}
Basierend auf diesen Fehler und mein stack-trace, kann jemand mich in die richtige Richtung?
Vielen Dank,
Phil
InformationsquelleAutor der Frage phil | 2011-10-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich lief in das gleiche Problem, aber ich nachlässig erklärt:
anstatt richtig:
Joe
*update - ich habe auch bemerkt, in xCode 4.3 der Vorlage generiert wird, wenn Sie erstellen eine neue Klasse UITableViewController fehlt, ist ein Schlüssel-Element in cellForRowAtIndexPath. Das heißt:
InformationsquelleAutor der Antwort Joe Fratianni
Ok, sorry, SNAFU alert.
Ich bin mir nicht sicher, wie das aufgetreten ist, aber wenn Sie bemerken, in meiner Funktion Erklärung für "cellForRowAtIndexPath"... es hat einfach atIndexPath statt cellForRowAtIndexPath. Ich muss getan haben einige Art von schlecht beraten Globale suchen-und-ersetzen, und es ruiniert mein Projekt.
Arbeiten jetzt. Danke.
Frage - warum sollte sich der code kompilieren ohne Fehler oder Warnung - Wow - das dauerte zu lange um es zu finden.
InformationsquelleAutor der Antwort phil
Basierend auf
UITableView dataSource must return a cell from tableView:cellForRowAtIndexPath:
sieht es aus wie Sie vielleicht vergessen haben, legen Sie eine Zelle Bezeichner bei der Instanziierung:Wenn nicht, wo im code der Fehler verursacht wird?
InformationsquelleAutor der Antwort element119
In meinem Fall iOS 5.0 ~ 6.0 mit storyboard sollte derselben Zelle Bezeichner zwischen den Methode
Wenn Sie @"Cell" für die Zell-id, sollte der name in der Kennung des entsprechenden tableViewCell im Attribute Inspektor der storyboard-Datei.
Wenn Sie eine Unterklasse von UITableView-Datei, die Standard-code verwendet @"Cell", aber nicht, storyboard, " blank. So müssen die Aufmerksamkeit.
InformationsquelleAutor der Antwort bureaucoconut
Einer der sehr häufiger Grund für diesen Fehler ist, dass in der nib-Datei, die top-level-UI-view muss vom Typ UITableViewCell und wenn das nicht der Fall ist, wirft es diese assertion-Fehler.
InformationsquelleAutor der Antwort theiOSguy
Habe ich diese Ausnahme, wenn ich versehentlich gelöscht
return cell
imtableView:cellForRowAtIndexPath:
. Diese Ausnahme wird ausgelöst, wenn keine Zelle erstellt oder zurückgegeben werden.InformationsquelleAutor der Antwort NightFury
Nur ich Rang mit dieser geltend machen, für ein paar Stunden. Ich habe versucht, fügen Sie einen UIButton als eine Untersicht in die Zelle, wurde auch in den nib. Scheinbar "Autolayout" nicht wie in diesem, so dass Sie nach un-überprüfung "die option" in meiner Feder, die ich nicht mehr erhalten Absturz.
InformationsquelleAutor der Antwort user2602868