UISearchDisplayController und UITableView Prototyp Zelle Absturz
Ich habe eine UIViewController
setup in ein storyboard mit einer tableview
und UISearchDisplayController
.
Ich bin versucht, einen custom-Prototyp-Zelle von selbst.tableview (die mit Haupt-tableview in der storyboard). Es funktioniert gut, wenn self.tableview
zurückgekehrt war mindestens 1 Zelle, wenn ich die Last meiner Sicht, aber wenn self.tableview
wird nicht geladen, eine Zelle, die (da es keine Daten), und ich lade die UISearchBar
und Suche, die cellForRowAtIndexPath:
- Methode stürzt ab:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
CustomSearchCell *cell = [self.tableView dequeueReusableCellWithIdentifier:@"CustomSearchCell" forIndexPath:indexPath];
[self configureCell:cell atIndexPath:indexPath];
return cell;
}
-(void)configureCell:(CustomSearchCell *)cell atIndexPath:(NSIndexPath *)indexPath {
User *user = [self.fetchedResultsController objectAtIndexPath:indexPath];
cell.nameLabel.text = user.username;
}
Fehler:
*** Assertion failure in -[UITableViewRowData rectForRow:inSection:heightCanBeGuessed:]
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'request for rect at invalid index path (<NSIndexPath: 0x9ef3d00> {length = 2, path = 0 - 0})
Meine fetchedResultsController zu haben scheint-Daten (Abschnitt 1, 2 Zeilen) an der Stelle der oben beschriebenen Methode aufgerufen wird. Es stürzt auf die dequeueReusableCellWithIdentifier
Linie.
Irgendwelche Hinweise/Ideen? Es sollte dequeue-die Prototyp-Zelle aus self.tableview
, aber meine Vermutung ist, es wurde keiner erstellt in self.tableview
so ist dies die Ursache?
- Können Sie nach dem code, der
configureCell:atIndexPath:
Methode? Kann das problem dort - es stürzt ab bevor er dort ankommt... ich werde es hinzufügen, wenn
- oben Hinzugefügt... nicht wirklich viel
- Nach Ihrem
dequeueReusableCellWithIdentifier
müssen Sie überprüfenif (cell == nil)
, und wenn dem so ist, müssen Sie erstellen eine Zelle. - Scheint zu funktionieren ok, auf der selbst.tableview obwohl? Trotzdem, wie kann ich zu instanziieren, von der Prototyp-Zelle im storyboard?
- Mit der Prototyp-Zelle definiert, die in einem storyboard, dequeueReusableCellWithIdentifier sollte immer wieder eine gültige Zelle.
- Dieses sieht wie es sein könnte, mein Problem: stackoverflow.com/a/15895014/248168
Du musst angemeldet sein, um einen Kommentar abzugeben.
UISearchDisplayController schafft es, die eigenen UITableView (gefilterte Tabelle), zusätzlich zu Ihrer primären Tabelle. Die cell-id in der gefilterten Tabelle nicht mit Ihrem primären Tabelle. Sie wollen auch, Holen sich die Zelle nicht durch indexPath als beide Tabellen können erheblich Verschieden von einander hinsichtlich der Anzahl der Zeilen, etc.
Also anstatt dies zu tun:
statt dies zu tun:
...forIndexPath:
version verwendet den index-Pfad eine zusätzliche Konfiguration durchführen, basierend auf der Zelle, die position in der Tabelle anzeigen. Es scheint, dass die "zusätzliche Konfiguration" ist ein problem, wenn der index path nicht sinnvoll im Hinblick auf die Tabelle der Inhalt, und wäre natürlich unerwünscht, wenn die angeforderte Zelle verwendet wird, in einer ganz anderen Tabelle (die ist, was passiert mit UISearchDisplayController).Ich löste dies durch duplizieren der Prototyp-Zelle in eine neue xib:
In viewDidLoad:
Aktualisiert und cellForRowAtIndexPath die Verwendung der Methode tableview nicht das original selbst.tableview:
Dies ist ein altes Thema, aber wenn jemand rennt in das gleiche problem immer noch, es war für mich im Zusammenhang mit mit dieser Zeile in der viewDidLoad -
und zur gleichen Zeit die Umsetzung der heightForRowAtIndexPath delegate-Methode mit Variablen Höhen und unter verschiedenen Bedingungen
Entfernen der geschätzte Zeilenhöhe gelöst.
Wenn Sie à UISearchDisplayController in der methode celForRowAtIndexPath, müssen Sie die tableView-parameter-methode und nicht die behalten Zeiger des Reglers.
versuchen Sie es mit diesem code