Ich bin developinga Core Data-App für das iPhone, und ich bin neu in der ganzen Plattform usw.Verarbeiten von Fehlern und Ausnahmen auf dem iPhone
Meine Frage ist, wie viel soll ich suchen und Fehler und Ausnahmen behandeln, zum Beispiel beim Öffnen des persistenten Speichers. Mit Blick auf die „Orte“ Core Data Tutorial zum Beispiel (hoffen, seine OK es so hier zu zitieren):
(Se Kommentare im Code für einige meiner conserns)
- (void)applicationDidFinishLaunching:(UIApplication *)application {
...
NSManagedObjectContext *context = [self managedObjectContext];
if (!context) {
// Handle the error. Can this ever happen with this code? (see next comment below)
- (NSManagedObjectContext *) managedObjectContext {
...
NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
// it seems even if I get an error or exception down in persistentStoreCoordinator,
// coordinator will still never be nil, or?
if (coordinator != nil) {
managedObjectContext = [[NSManagedObjectContext alloc] init];
[managedObjectContext setPersistentStoreCoordinator: coordinator];
}
return managedObjectContext;
}
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator {
...
NSError *error;
// should i have an: if managedObjectModel != nil here?
persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] [initWithManagedObjectModel: [self managedObjectModel]];
//need a @try here too?
if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:nil error:&error]) {
// Handle error, do what?
}
return persistentStoreCoordinator;
}
- (NSManagedObjectModel *)managedObjectModel {
...
//should have a @try here? But how to handle caught exceptions? Just return nil?
managedObjectModel = [[NSManagedObjectModel mergedModelFromBundles:nil] retain];
return managedObjectModel;
}
So ist die Frage wirklich, wo man nach Fehlern sucht, wo man nach Ausnahmen sucht, wie und wann man sie nach oben verbreitet, und wie man schwere Fehler auf dem iPhone auf eine gute Weise behandelt?
Edit: nach ein paar Antworten auf diese und meine andere damit zusammenhängende Frage Empfang Ich habe einige clearifications von dem, was ich versuche zu fragen: ich jetzt
Ausnahmen in Kakao verstehen sind meist Programmierer Fehler für die Suche, nicht Laufzeit Fehler. Würden Sie beim Versand der App so weit gehen, dass keine Ausnahmen behandelt werden (wenn sie nicht für Debug-Zwecke hinzugefügt wurden)? Oder sollte ich trotzdem defensiv programmieren und sowieso viel @try verwenden?
Da die iPhone-Apps Sandboxed sind und der Benutzer nicht zum Dateisystem gelangen kann, welche möglichen Laufzeitfehler sind beim Entwurf einer sqlite-basierten Kerndaten-App sinnvoll? Ich meine, die Datenbankdatei wird wahrscheinlich nicht verschwinden .... aber vielleicht könnte ein zukünftiges Upgrade fehlschlagen, wenn eine alte ungültige SQLite-Datenbank verlassen wird ... Was ist eine gute Praxis?
Auch andere Dinge wie Object Alloc sind wahrscheinlich extrem unwahrscheinlich zu scheitern? Sie würden eine niedrige Speicherwarnung bekommen, lange bevor das passiert .... oder ...?
Und was ist gute Programmierpraxis unter Berücksichtigung der Fehler - und Ausnahmebehandlung im obigen Beispiel, wo ich einen Fehler "tief" in den Methoden bekommen kann ... sollte ich den Fehler dort unten behandeln oder warten, bis es das erreicht oben in irgendeiner Form (ein Null-Objekt zum Beispiel), oder behandeln sie alle in einer Kettenreaktion?
Und, wie man damit umgeht? Bei NSLog anmelden und fortfahren? Zeigen Sie eine modale Infobox an und warten Sie, bis der Benutzer die App beendet hat. Oder "Error xxx, drücke OK, um die App zu beenden"?
Und gibt es eine Möglichkeit, einen modalen Dialog direkt anzuzeigen? Mir ist aufgefallen, dass einige Fehler, die einen Dialog anzeigen, nie gezeigt haben, dass die App fortgesetzt und später abgestürzt ist. Gibt es eine SHOW NOW-Methode?
Viele Fragen, hoffe, dass Sie interessiert wären, zumindest einige von ihnen zu beantworten, und dass dies für andere von Interesse sein könnte!
Rgds PM
Petter, oder und Redakteur, könnten Sie bitte Ihre Formatierung beheben? Es ist fast unmöglich herauszufinden, auf was Sie sich in Inline-Kommentaren beziehen. – groundhog