iPhone-Core-Daten "Produktion" Fehlerbehandlung
Ich gesehen habe in der Beispiel-code geliefert von Apple Hinweise darauf, wie Sie behandeln soll, die Core-Daten-Fehler. I. e:
NSError *error = nil;
if (![context save:&error]) {
/*
Replace this implementation with code to handle the error appropriately.
abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. If it is not possible to recover from the error, display an alert panel that instructs the user to quit the application by pressing the Home button.
*/
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
Aber nie Beispiele dafür, wie Sie sollte umzusetzen.
Hat jemand (oder kann mir in der Richtung) einige tatsächliche "Produktion" code veranschaulicht die oben genannten Methode.
Vielen Dank im Voraus,
Matt
- +1 das ist eine ausgezeichnete Frage.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Niemand wird Ihnen zeigen, production code, da es von 100% auf Ihre Anwendung und wo der Fehler Auftritt.
Persönlich lege ich eine assert-Anweisung in es, weil es zu 99,9% der Zeit, die dieser Fehler auftreten wird in der Entwicklung und wenn Sie die fix it-es ist hoch unwahrscheinlich, dass Sie werden sehen, dass es in der Produktion.
Nachdem die behaupten, ich würde eine Benachrichtigung an den Benutzer, lassen Sie Sie wissen, dass ein nicht behebbarer Fehler aufgetreten ist, und dass die Anwendung verlassen. Sie können auch einen Klappentext, dort bat Sie um Kontaktaufnahme mit dem Entwickler, so dass Sie hoffentlich verfolgen das geschehen.
Nach, ich lasse die abort() gibt, wie es "Abstürzen" der app und generieren Sie einen stack-trace, die Sie hoffentlich später auf die Spur des Problems.
-save:
nennen. Alle diese Bedingungen geschehen, lange bevor der code wäre dieser Punkt erreicht.-save:
genannt wird.Dies ist eine generische Methode, die ich kam mit Griff und display-validation-Fehler auf dem iPhone. Aber Marcus hat Recht: würden Sie wahrscheinlich wollen zu optimieren die Nachrichten werden mehr Benutzer freundlich. Aber das vermittelt Ihnen zumindest einen Ausgangspunkt, um zu sehen, was im Feld nicht validiert und warum.
Genießen.
NSValidationErrorObject
Schlüssel enthält das Objekt, das nicht überprüfen. Wenn irgendein Objekt nicht validieren, speichern wird nicht passieren (die geändert wird nicht auf die Festplatte geschrieben werden). Also je nach app, möchten Sie vielleicht, um den Benutzer aufzufordern, füllen Sie einen gültigen Wert ein, um das problem zu beheben und speichern Sie dann erneut.Ich bin überrascht, dass niemand hier ist eigentlich die Handhabung der Fehler, die Art und Weise es zu verstehen ist, behandelt werden. Wenn man sich die Dokumentation, Sie werden sehen.
Also wenn ich einen Fehler bei der Einrichtung der core-data-stack, tausche ich den rootViewController des UIWindow und zeigen UI, die eindeutig dem Benutzer mitteilt, dass Ihr Gerät möglicherweise voll oder Ihre Sicherheitseinstellungen sind zu hoch für diese App, um zu funktionieren. Auch ich gebe Ihnen ein 'versuchen Sie es erneut" - Schaltfläche, so können Sie versuchen, das problem zu beheben, bevor der core data stack wieder versucht.
Beispielsweise könnte der Benutzer frei etwas Speicherplatz zurück auf meine App und drücken Sie den button erneut versuchen.
Behauptet? Wirklich? Zu viele Entwickler in den Raum!
Ich bin auch überrascht über die Anzahl von tutorials online, die nicht schweigen, wie ein Speichervorgang fehlschlagen konnte aus diesen Gründen auch. So werden Sie brauchen, um sicherzustellen, dass alle sparen-Ereignis ÜBERALL in Ihrem App könnte scheitern, weil das Gerät GENAU in DIESER MINUTE wurde voll mit Ihren Apps speichern speichern speichern.
Fand ich dieses Allgemeine "speichern" - Funktion eine viel bessere Lösung:
, Wenn ein speichern fehlschlägt, wird die rollback-Ihre NSManagedObjectContext Bedeutung, es wird zurückgesetzt alle änderungen, die durchgeführt wurden in dem Zusammenhang die seit dem letzten speichern. So müssen Sie beobachten sorgfältig, um immer bestehen bleiben änderungen, die mit den oben genannten save-Funktion, so früh und regelmäßig wie möglich, da man sonst leicht die Daten verlieren sonst.
Für das einfügen von Daten, könnte dies eine lockerere Variante, dass andere änderungen live auf:
Hinweis: ich bin mit CocoaLumberjack für die Anmeldung hier.
Jeder Kommentar auf, wie das zu verbessern ist mehr als willkommen!
BR
Chris
Habe ich eine Swift-version, die nützliche Antwort von @JohannesFahrenkrug, die nützlich sein können :