7

Sono assolutamente confuso da questo e non riesco a capire cosa mi manca. Forse ancora molto da imparare sui dati di base.Sectioning Fetched Results Il controller si interrompe Ricerca Display

Questo è il mio controller Risultati inverosimile che visualizza una tabella sezione a meno, ma il mio controller Display Search Works:

self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request 
                    managedObjectContext:self.buckyballDatabase.managedObjectContext 
                     sectionNameKeyPath:nil 
                       cacheName:nil]; 

CONSIDERANDO che, non appena applico un sectionNameKeyPath, per aggiungere sezioni. Le sezioni vengono aggiunti, ma il mio controller display di ricerca è rotto, gettando l'errore di seguito:

*** Assertion failure in -[UITableViewRowData rectForRow:inSection:], /SourceCache/UIKit_Sim/UIKit-2372/UITableViewRowData.m:1630 
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'request for rect at invalid index path (<NSIndexPath 0x7481040> 2 indexes [0, 1])' 

E qui sono i miei implementazioni fonte visualizza tabella dei dati Dove FilteredList è un NSArray: -

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 
    if (tableView == self.tableView) 
    { 
     return [[self.fetchedResultsController sections] count]; 
    } 
    else 
    { 
     return 1; 
    } 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    if (tableView == self.tableView) 
    { 
     return [[[self.fetchedResultsController sections] objectAtIndex:section] numberOfObjects]; 
    } 
    else 
    { 
     return [self.filteredList count]; 
    } 
} 


- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section 
{ 
    if (tableView == self.tableView) 
    { 
     return [[[self.fetchedResultsController sections] objectAtIndex:section] name]; 
    } 
    else 
    { 
     return nil; 
    } 
} 

- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index 
{ 
    if (tableView == self.tableView) 
    { 
     if (index > 0) 
     { 
      return [self.fetchedResultsController sectionForSectionIndexTitle:title atIndex:index-1]; 
     } 
     else 
     { 
      self.tableView.contentOffset = CGPointZero; 
      return NSNotFound; 
     } 
    } 
    else 
    { 
     return 0; 
    } 
} 

- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView 
{ 
    if (tableView == self.tableView) 
    { 
     NSMutableArray *index = [NSMutableArray arrayWithObject:UITableViewIndexSearch]; 
     NSArray *initials = [self.fetchedResultsController sectionIndexTitles]; 
     [index addObjectsFromArray:initials]; 
     return index; 
    } 
    else 
    { 
     return nil; 
    } 
} 

Eccezione viene generata in cellForRowAtIndexPath nella riga sottostante: -

UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier 
                  forIndexPath:indexPath]; 

Si prega di chiedere se necessità di fornire ulteriori informazioni .. sto graffiare la mia testa così tanto su questo ..

+3

Provate ad usare '-dequeueReusableCellWithIdentifier:' e non ' -dequeueReusableCellWithIdentifier: forIndexPath: '. – chris

+0

Grazie per questo @chris ... ha funzionato il controller del display di ricerca. MA ogni aggiornamento (un paio di cancellazioni) nei dati di base interrompe la tabella in modo tale che tutti i dati scompaiano tranne i nomi degli indici e delle sezioni. La cosa funziona senza sectioning e indicizzazione :-(. ERROR era: CoreData: errore: Grave errore dell'applicazione. È stata rilevata un'eccezione dal delegato di NSFetchedResultsController durante una chiamata a -controllerDidChangeContent :. *** - [__ NSArrayM insertObject: atIndex:] : l'oggetto non può essere nullo con userInfo (null) –

+0

Prova questo: http://stackoverflow.com/questions/3077332/how-to-refresh-a-uitableviewcontroller-or-nsfetchedresultscontroller – MCKapur

risposta

3

Provare a utilizzare -dequeueReusableCellWithIdentifier: e non -dequeueReusableCellWithIdentifier:forIndexPath:.

+0

perché funziona? Ti odio, cacao; _; – figha

+0

Forse questo aiuterà: http://stackoverflow.com/questions/12714737/where-does-the- indexpath-di-dequeuereusablecellwithidentifierforindexpath-get – chris