12

Ho un NSFetchedResultController con sezione diversa. ho un crash quando si tenta di ricerca utilizzando UISearchDisplayController:Blocco durante la ricerca in due sezioni

*** Assertion failure in -[UITableViewRowData rectForRow:inSection:], /SourceCache/UIKit/UIKit-2372/UITableViewRowData.m:1630 

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'request for rect at invalid index path (<NSIndexPath 0x1d2c4120> 2 indexes [0, 1])' 

ho controllato e il mio allineamento di ricerca ha infatti due voci (il risultato atteso):

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 

It restituisce 1

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 

E restituisce 2

Divertente, se ho una sola sezione, funziona perfettamente.

Aiuto per favore! :)

risposta

38

Non è sicuro se capito, io penserei che hai fatto ma supponendo che si sta utilizzando

[self.tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; 

nel vostro cellForRowAtIndexPath

fare

if (tableView == self.searchDisplayController.searchResultsTableView) { 
    cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
} else { 
    cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; 
} 

anche fare in modo che si stanno usando self.tableView

+3

Potresti spiegarci il motivo? Mi sto solo chiedendo come posso aiutarmi a risolvere un altro problema in futuro. – Jeremy1026

+9

Questo perché si chiede self.tableView per una cella. Ma indexPath, durante la ricerca, è un percorso di indice nella tabella di ricerca. Il percorso dell'indice non è necessariamente valido per self.table, quindi questo percorso dell'indice non può essere passato ad esso. self.table deve essere richiesto per la cella, in quanto CellIdentifier non è stato registrato con la tabella di ricerca. –

+0

E sì, è ancora una magia stupida far funzionare le cose! :) –