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 ..
Provate ad usare '-dequeueReusableCellWithIdentifier:' e non ' -dequeueReusableCellWithIdentifier: forIndexPath: '. – chris
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) –
Prova questo: http://stackoverflow.com/questions/3077332/how-to-refresh-a-uitableviewcontroller-or-nsfetchedresultscontroller – MCKapur