Sto utilizzando un NSFetchedResultsController per gestire la visualizzazione degli oggetti gestiti recuperati in una vista tabella che ha una sezione. La tabella inizia vuota e l'utente può aggiungere nuove entità utilizzando l'interfaccia utente. Così com'è, il programma funziona sempre quando si aggiunge la prima entità e si blocca sempre quando si aggiunge un secondo. A volte non si presenta alcun errore in caso di crash e altre volte ci sono errori di tipi diversi (alcuni inclusi di seguito). Attraverso le istruzioni e la traccia del log vedo che il programma si blocca subito dopo che il controller del delegato di NSFetchResultsControllerWillChangeContent (che chiama [self.tableView beginUpdates];) esce dal metodo, ma prima che venga chiamato qualsiasi altro metodo nel mio codice. Ecco alcune delle parti del mio codice che rilevano. Configurazione del NSFetchedResultsController:NSFetchedResults La vista tabella basata sul controllore fallisce sempre al SECONDO inserimento dell'entità
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setEntity:[NSEntityDescription entityForName:@"Beer"
inManagedObjectContext:self.managedObjectContext]];
// Configure request's entity and predicate
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES];
NSArray *sortDescriptors = [NSArray arrayWithObjects:sortDescriptor, nil];
[fetchRequest setSortDescriptors:sortDescriptors];
[sortDescriptor release];
[sortDescriptors release];
NSString *expression = [NSString stringWithFormat:@"brewery.name LIKE \"%@\"", self.brewery.name];
NSPredicate *predicate = [NSPredicate predicateWithFormat:expression];
[fetchRequest setPredicate:predicate];
self.resultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
managedObjectContext:self.managedObjectContext
sectionNameKeyPath:nil
cacheName:nil];
self.resultsController.delegate = self;
[fetchRequest release];
NSError *error = nil;
BOOL success = [resultsController performFetch:&error];
if (!success) {
NSLog(@"Error fetching request %@", [error localizedDescription]);
}
Aggiunta nuova entità:
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Beer" inManagedObjectContext:self.managedObjectContext];
Beer *beer = [[Beer alloc] initWithEntity:entity insertIntoManagedObjectContext:self.managedObjectContext];
beer.name = beerName;
beer.brewery = self.brewery;
Ho visto le avvertenze nella documentazione sui problemi che espongono le tabelle con una sezione, e ho usato soluzione di Apple per questo senza alcun risultato. Comunque, quei metodi non vengono chiamati prima dello schianto.
Alcuni degli errori che ho ricevuto:
Serious application error. Exception was caught during Core Data change processing: *** -[NSCFString compareObject:toObject:]: unrecognized selector sent to instance 0x4e808c0 with userInfo (null)
Serious application error. Exception was caught during Core Data change processing: *** -[CALayer compareObject:toObject:]: unrecognized selector sent to instance 0x4e53b80 with userInfo (null)
Serious application error. Exception was caught during Core Data change processing: *** -[UITextTapRecognizer controllerWillChangeContent:]: unrecognized selector sent to instance 0x4ca5d70 with userInfo (null)
Serious application error. Exception was caught during Core Data change processing: *** -[CALayer controllerWillChangeContent:]: unrecognized selector sent to instance 0x4e271a0 with userInfo (null)
Serious application error. Exception was caught during Core Data change processing: *** -[NSCFNumber countByEnumeratingWithState:objects:count:]: unrecognized selector sent to instance 0x4c96ee0 with userInfo (null)
Come si può vedere, gli errori (quando uno è stato presentato) non sono coerenti, anche in assenza di modifica al codice è stato fatto.
Qualcuno può capire cosa sto facendo male?
Ho esattamente lo stesso errore. Puoi dirmi cosa hai fatto per risolvere il problema? Grazie. – zsong