Ich verwende einen NSFetchedResultsController, um die Anzeige abgeholter verwalteter Objekte in einer Tabellenansicht mit einem Abschnitt zu verwalten. Die Tabelle beginnt leer und der Benutzer kann über die Benutzeroberfläche neue Entitäten hinzufügen. So wie es aussieht, funktioniert das Programm immer beim Hinzufügen der ersten Entity und stürzt immer beim Hinzufügen einer Sekunde ab. Es gibt manchmal keinen Fehler beim Absturz und manchmal gibt es Fehler unterschiedlicher Art (einige sind unten enthalten). Durch Log-Statements und Tracing sehe ich, dass das Programm direkt nach dem ControllerWillChangeContent des NSFetchResultsController-Delegaten (der die Methode [self.tableView beginUpdates;) aufruft] abstürzt, bevor irgendeine andere Methode in meinem Code aufgerufen wird. Hier sind einige der relevanten Teile meines Codes. Konfigurieren des NSFetchedResultsController:NSFetchedResultsController-basierte Tabellenansicht schlägt immer auf SECOND-Einfügung der Entität
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]);
}
neue Einheit hinzu:
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Beer" inManagedObjectContext:self.managedObjectContext];
Beer *beer = [[Beer alloc] initWithEntity:entity insertIntoManagedObjectContext:self.managedObjectContext];
beer.name = beerName;
beer.brewery = self.brewery;
Ich habe die Warnungen in der Dokumentation über Probleme gesehen Tabellen mit einem Abschnitt anzeigt, und ich habe Apples Abhilfe für die ohne Erfolg verwendet. Diese Methoden werden sowieso nicht vor dem Absturz aufgerufen.
Einige der Fehler, die ich erhalten haben:
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)
Wie Sie sehen können, die Fehler (wenn man vorgestellt wurde) nicht konsistent sind, selbst wenn keine Änderung am Code vorgenommen wurde.
Kann jemand herausfinden, was ich falsch mache?
Ich habe genau denselben Fehler. Können Sie mir sagen, was Sie getan haben, um das Problem zu lösen? Vielen Dank. – zsong