3 Stimmen

Kerndatenfehler: _Unwind_Resume aufgerufen von der Funktion _PFFaultHandlerLookupRow im Bild CoreData

Ich erhalte diese seltsame Fehlermeldung von Core Date und verstehe nicht, warum.
Der folgende Code wird ausgeführt, wenn ich eine Zeile in einer UITableView lösche.
Ich übergebe eine Zeichenkette und ein Objekt an die unten stehende Methode, und sie holt den Artikel in einer Datenbanktabelle, die diese Zeichenkette enthält und einen Fremdschlüssel zu diesem Objekt hat. Dann lösche ich das Objekt und lade die Tabelle neu.

\- (void)deleteFavorite:(NSString \*)link inFolder:(Favorites \*)f {
    NSFetchRequest \*request = \[\[NSFetchRequest alloc\] init\];
    NSEntityDescription \*favsDecriptor = \[NSEntityDescription entityForName:@"Favorites" inManagedObjectContext:context\];
    \[request setEntity:favsDecriptor\];
    NSPredicate \*predicate = \[NSPredicate predicateWithFormat:@"(belongsTo == %@) AND (link = %@)", f, link\];
    \[request setPredicate:predicate\];

    NSError \*error = nil;   
    NSMutableArray \*fav = \[\[NSMutableArray alloc\] init\];
    fav = \[\[context executeFetchRequest:request error:&error\] retain\];
    if (!\[context save:&error\]) {
        NSLog(@"Cannot fetch the story from the fetch request.");
    }

    NSLog(\[\[fav objectAtIndex:0\] title\]);
    error = nil;
    \[context deleteObject:\[fav objectAtIndex:0\]\];
    if (!\[context save:&error\]) {
        NSLog(@"Can't delete the fav! %@", error);
    }
}

Die Anwendung stürzt sofort ab und ich erhalte diese Meldung in der Konsole. Aber wenn ich die App danach starte, ist die Zeile gelöscht worden.

Detected an attempt to call a symbol in system libraries that is not present on the iPhone:
\_Unwind\_Resume called from function \_PFFaultHandlerLookupRow in image CoreData.

Bitte um Hilfe!
Vielen Dank im Voraus an alle!

2voto

Philip Regan Punkte 4886

Dies hängt wahrscheinlich mit einem Fehler in Core Data selbst zusammen. Bei mir trat derselbe Fehler auf (ich habe hier in SO danach gefragt), und meine einzige Lösung bestand darin, die Schlüsselwörter im Prädikat zu ändern, was immer noch zu denselben Ergebnissen führte. Es bedurfte einiger Experimente, um die richtige Kombination zu finden. Nicht ideal, aber das ist die beste Antwort, die ich aus meiner Erfahrung heraus geben kann.

2voto

westsider Punkte 4959

Ist es möglich, dass Sie einen Verweis auf das Löschobjekt halten oder dass das gelöschte Objekt ein Beobachter ist und einen Rückruf erhält nach Es wurde gelöscht? Ich hatte kürzlich ein ähnliches Problem, allerdings mit einer etwas anderen Fehlermeldung. In meinem Fall stürzte ich auch beim Löschen ab (unter bestimmten Bedingungen), aber als ich das zu löschende Objekt neu startete, war es tatsächlich gelöscht worden.

Wenn Sie dies noch nicht getan haben, wählen Sie im Menü Ausführen die Option Objective-C-Ausnahmen stoppen aus. Dies half mir, die Ursache meines Absturzes zu finden. In meinem Fall war es der KVO-Beobachter, der einen Callback für die Änderung des Wertes einer Eigenschaft eines gelöschten NSManagedObjects erhielt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X