2012-06-19 11 views
11

Ich habe vor kurzem begonnen, Objective-C zu lernen, und ich arbeite an einer iOS-App als Übung, ich möchte mit Überlauf umgehen, indem Ausnahme (ich komme aus einem Java-Hintergrund), ich Gesucht die Referenz gibt es nur NSException, aber dann las ich in dem Abschnitt, dass Themen über die Ausnahmebehandlung sagen, und sie sagten, NSError zu verwenden, las ich die Referenz, aber sie hatten das gleiche Protokoll und Methoden, also was ist der Unterschied zwischen ihnen? Und was ist besser?NSException und NSError benutzerdefinierte Ausnahme/Fehler

Auch ich möchte meine eigene Ausnahme oder Fehlerklasse erstellen, gibt es irgendwelche Methoden oder Felder, die ich einschließen sollte? (Wie bei der Implementierung der Exception Schnittstelle in Java). Dank

Antwort

21

NSError ist für nicht schwerwiegende, behebbare Fehler konzipiert. Die Probleme, die von einem NSError erfasst werden sollen, sind oft Benutzerfehler (oder sind Fehler, die dem Benutzer präsentiert werden können), können oft wiederhergestellt werden (daher -presentError: und NSErrorRecoveryAttempting) und sind normalerweise erwartete oder vorhersehbare Fehler (als würde ich versuchen, eine Datei zu öffnen, auf die Sie keinen Zugriff haben, oder versuchen, zwischen inkompatiblen Zeichenfolgencodierungen zu konvertieren.

NSException ist für potentiell fatale Programmierfehler ausgelegt. Diese Fehler sollen potenzielle Fehler in Ihrer Anwendung anzeigen, in denen Sie die Voraussetzungen für die Ausführung einiger Operationen nicht korrekt überprüft haben (z. B. versuchen, auf einen Array-Index zuzugreifen, der seine Grenzen überschreitet oder ein unveränderliches Objekt zu mutieren versucht). Die Einführung in die Exception Programming Guide erklärt dies ein wenig.

+0

Ohh, Okay. Also für den Umgang mit Überlauf sollte ich Exception verwenden, da es ein Fehler in meiner Anwendung ist? –

+1

Ja, wenn es eine unerwartete Situation ist, die nicht mit dem richtigen Code auftreten sollte. –

+0

Ohh Danke, aber was ist mit dem zweiten Teil der Frage, indem ich meine eigene Exception-Klasse erstelle? –