Da iOS 8 ho riscontrato un problema strano con una visualizzazione tabella/configurazione UISearchBar e mi sono chiesto se altri hanno riscontrato un problema simile o possono indicare cosa, semmai, potrei sbagliarmi. L'ampia situazione:Problema di visualizzazione quando si utilizza UISearchBar con un controller di visualizzazione tabella e si passa a un'altra vista
- Ho un UITableViewController con un'UISearchBar al suo interno, allestito nella app Storyboard
- la vista tabella è una cella personalizzato, ancora una volta, allestito nella Storyboard
- la selezione di un tavolo riga avvia un passaggio ad un'altra vista
- eseguendo una ricerca, toccando una riga dai risultati della ricerca per passare all'altra vista, quindi tornando indietro di nuovo, si innesca vari problemi.
"I problemi" sono che se implemento cellForRowAtIndexPath come segue:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
MyCell *cell = (MyCell *) [self.tableView dequeueReusableCellWithIdentifier:@"MyId" forIndexPath:indexPath];
...
in altre parole specificando il percorso per dequeueReusableCellWithIdentifier, allora questo si traduce in un fallimento BAD_ACCESS o asserzione in iOS 8 (ma non iOS 7). Specificamente, un errore di asserzione o BAD_ACCESS si verifica quando si chiama dequeueReusableCellWithIdentifier nelle circostanze sopra menzionate, cioè quando, con una ricerca attiva, si passa da una delle celle nella tabella dei risultati a un'altra vista e quindi si segue nuovamente.
Ora, posso fermare l'errore che si verifica semplicemente chiamando:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
MyCell *cell = (MyCell *) [self.tableView dequeueReusableCellWithIdentifier:@"MyId"];
...
senza passare nel indexPath. Questo funziona quindi senza errori in quanto tali, ma tornando alla visualizzazione tabella con i risultati di ricerca, si verifica uno strano problema di visualizzazione in cui sono posizionati sotto i risultati della ricerca, sembrano esserci i separatori di una tabella "fantasma", quasi come se il il sistema sta tentando di eseguire il rendering di una tabella direttamente sopra un'altra (ma cellForRowAtIndexPath non viene chiamato per ogni tabella, solo per la tabella dei risultati della ricerca come previsto).
Ho lo stesso problema se il seguito è collegato al controller di cella o di visualizzazione tabella (quindi in quest'ultimo caso, implemento didSelectRowAtIndexPath per attivare manualmente il seguito).
Quindi: (a) qualcuno può puntare a qualcosa che potrei fare male a causare questi problemi, o (b) puntare a un esempio di funzionamento di un controller di visualizzazione tabella con UISearchBar dove le celle della tabella seguono un altro vista? Sono sorpreso di avere così tanti problemi che l'implementazione di una tabella ricercabile con le viste di dettaglio deve essere una cosa comune e noiosa che le persone fanno sempre, no?
progetto di esempio esibendo l'iusse:http://www.javamex.com/DL/TableTest.zip
Potete allegare un progetto di esempio per questo? Non posso riprodurlo – gabbler
Carica un esempio: se carichi l'app, cerca ".geg" One ", quindi fai clic sull'icona delle informazioni sulla riga nei risultati della ricerca per andare alla visualizzazione dettagli, quindi torna indietro, inizia a eliminare il termine di ricerca" Uno "per inserire qualcos'altro, si otterrà il fallimento dell'asserzione. –
Non riesco a riprodurre il secondo problema. Quello che ho fatto è stato mettere una condizione 'if (self.searchDisplayController.active) { cell = [self.tableView dequeueReusableCellWithIdentifier: @" MyCell "]; } else cell = [self.tableView dequeueReusableCellWithIdentifier: @ "MyCell" forIndexPath: indexPath]; 'Funziona bene – EridB