UITableView cellforrowatindexpath nicht genannt
Ich bin ziemlich neu für die Iphone-Entwicklung . also, bitte tragen Sie mich wenn ich Sie bitten, einige sehr einfache Fragen stellen.
In meiner Anwendung habe ich mehrere Ansichten(dh .xib-Dateien). Klick auf den button in der Hauptansicht(CouponWebsiteViewController.Xib) der Anwendung laden soll in der zweiten Ansicht(BrowseList.Xib), die enthält eine UITable und ich habe zum füllen UITable mit einigen Daten. Ich geschrieben habe folgenden code zum Auffüllen der Daten auf BrowseList.m-Datei:
- (void) viewDidLoad{
arrayData = [[NSArray alloc] init];
arrayData = [arrayData arrayByAddingObject:@"dfsgdf"];
arrayData = [arrayData arrayByAddingObject:@"aaaaaa"];
self.lblNewScreen.text = [arrayData objectAtIndex:0];
[super viewDidLoad];
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
//Customize the number of rows in the table view.
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return [arrayData count];
}
//Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc]
initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:CellIdentifier]
autorelease];
}
NSString *cellValue = [arrayData objectAtIndex:indexPath.row];
cell.textLabel.text = cellValue;
[tableView setEditing:YES animated:YES];
return cell;
}
Aber Es ist nicht das Auffüllen der Daten in der Tabelle , wenn ich Debuggen diesem code habe ich gefunden, dass es nicht ausgeführt cellForRowAtIndexPath-Methode, aber es ist debugging numberOfRowsInSection und numberOfSectionsInTableView Methoden.
Aber die interessante Sache ist, wenn ich schreiben Sie den gleichen code auf der CouponWebsiteViewController.m (D. H. auf der main view), dann ist das Auffüllen der Daten in der Tabelle.
Der Punkt ist, dieser code ist in Ordnung, die auf der Haupt-anzeigen, aber es funktioniert nicht für die anderen Ansichten.
Kann einer mir sagen, was bin ich oder andere Weise zum Auffüllen der UITable auf andere Ansichten als die wichtigsten ansehen.
Vielen Dank im Voraus.
Gaurav
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich bin nicht positiv, aber hier sind einige Ideen.
viewDidLoad
es zu spät ist.ViewDidLoad
ausgeführt wird, nachdem die Daten bereits platziert in der Tabelle. Versuchen Sie, diesen code in die initWithStyle Methode oder was auch immerinit
Methode, die Sie haben. Oder man könnte es sogar int dieViewWillAppear
Methode, aber dann stellen Sie sicher, dass Sie diese nächste Vorschlag.[self.tableView reloadData]
am Ende derviewDidLoad
Methode. Aber das ist nicht so optimal wie der erste Vorschlag.Sind Sie sicher, dass Sie Ihre Klasse als Datenquelle für die Tabelle? Um dies zu tun, control+klicken Sie auf table view im Interface Builder und ziehen Sie es auf den File ' s Owner unter Platzhalter. Dann wählen Sie dataSource (und wahrscheinlich Delegierten zu, abhängig von Ihrem controller-view setup).
Ich schlage vor, Sie stellen Sie sicher, dass die Größe der Tabelle ist es erforderlich, Zeilen angezeigt werden.
In der Tat, es könnte ein Fall für die warum die Methode
cellForRowAtIndexPath
ist nicht genannt, jedoch ist dienumberOfRowsInSection
genannt werden sollte.In diesem Fall werden Sie nicht sehen, nichts in der Tabelle.
Für jeden, der kommt über dieses problem, ich löste es durch hinzufügen meine TableView-controller als Kind zu den Eltern controller mit:
Alte Frage, aber ich werden chime in. Für die andere.
Gibt es eine Reihe von Gründen, warum ein tableview aktualisiert nicht und dass cellForRowAtIndexPath: nicht genannt.
Wenn Sie mit einem UITableViewController direkt, dann ist es amy sein, dass die "numberOfRowsInSection:" Methode 0 zurückgeben
Wenn Sie eine UItableView, die in Ihrer view-controller. die Chancen sind Sie haben sich nicht verabschiedet, die richtigen Protokolle und implementiert die Methoden - plus wenn Sie ein xib-oder storyboard, die Sie noch nicht zugeordnet die Rechte delegate und datasource ist die andere mögliche problem.
Schließlich, wenn Sie eine Unterklasse von UITableViewController dann ist es möglich, dass Sie noch nicht überschrieben, eine der Standard-Methoden und wieder numberOfRowsInSection ist die Rückgabe 0.
Initialisieren UITableView in viewWillAppear...
Ich habe Begegnung einige ähnliche problem gibt. Der table view delegate und data source richtig eingestellt ist, und
(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
gibt auch eine positive Zahl. Aber- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
wird nie aufgerufen.Ich habe versucht, die Methoden vor, aber Es funktioniert nicht weder. Schließlich habe ich bemerkt, dass ich vergessen haben, fügen Sie die Tabelle als eine Untersicht meiner view-controller. Nach tun, dass es funktioniert wie ein Charme.
Haben Sie stellen Sie sicher, dass die Tabelle als Delegierter?
Wenn Sie ein UITableViewController Sie diese in viewDidLoad:
Wenn Sie eine andere Art der view-controller, stellen Sie einfach die UITableView ein IBOutlet, stellen die verbindungen zu den Datei-Besitzer für tableViewDelegate und tableViewDataSource dann tun Sie dies in viewDidLoad:
Auch stellen Sie sicher, entsprechen die UITableViewDelegate und UITableViewDataSource Protokolle in Ihre .h-Datei, wenn der View-Controller wird nicht ein UITableViewController
Cheers
Wenn die mutable-array oder das array, das Sie verwenden zum Auffüllen der Inhalt der Zelle wird als eine Eigenschaft in der header-Datei.
dann stellen Sie sicher, verwenden Sie immer
haben und dann die Anzahl in numberOfRowsInSection, so müssen Sie auf Sie zugreifen:
Dies ist sehr viel, wie den this-Zeiger verwenden Sie verweisen auf die Instanz-Variablen.
Und ja, natürlich müssen Sie auch im Hinterkopf behalten, wenn Sie haben, legen Sie die dataSource und delegate der UITableView auf file ' s owner. Auch dass Sie die UITableViewDelegate und UITableViewDataSource in Ihrem header-Datei der viewController.
Ich hoffe es hilft dir. Viel Glück. Happy Coding!
Prost!!
Gut, ich kann nur hinzufügen, ein einfacher Punkt für alle mit diesem problem. Ich würde empfehlen, mit debug und stellen Sie sicher dass:
nicht 0 zurückgeben. Wenn diese Funktion nicht implementiert ist oder wenn es 0 zurückgibt, ist die Methode:
wird gar nicht aufgerufen, da gibt es keine Zellen angezeigt werden.
Überprüfen Sie, dass der tableview Hinzugefügt wurde die Sicht. Wenn nicht, dann andere table view delegate und datasource-Methoden ausgelöst werden wird, aber nicht cellforrow 🙂
War ich auch mit diesem problem im UITableView, ich habe auch die data-source und delegate zu der Tabelle anzeigen, aber meine
cellForRowAtIndexPath
- Methode nicht aufgerufen wurde.Lösung:
mein Netzwerk blockierte meine Methode (mit einer firewall). Ich fragte meine Netzwerk-admin, und ich bekam vollen Zugriff auf das Netzwerk und dann auf meine
cellForRowIndexPath
- Methode aufgerufen wurde.wenn meine Antwort kommt aus einem web-Dienst, aufgrund von Netzwerk-block-response-schwarz war also
cellForRowIndexPath
- Methode nicht aufgerufen wurde.