2013-03-24 12 views
5

Entschuldigung für solch eine neue Frage.ObjC: Fehlerbehandlung ... was zurückgegeben werden soll

Ich habe eine Klassenmethode geschrieben, die drei Zeichenfolgen verwendet und eine Teilzeichenfolge zurückgibt.

Ich habe bedingte Anweisungen geschrieben, die nur die Teilzeichenfolge zurückgeben, wenn bestimmte Kriterien erfüllt sind. Ich bin mir jedoch nicht sicher, was ich zurückgeben muss, wenn der Teilstring nicht extrahiert werden kann. Im Moment habe ich die Methode eine Standard-Fehler-Zeichenfolge zurückgeben, aber ich habe das Gefühl, dass dies nicht Best Practice sein kann.

Hier ist meine Methode:

+(NSString *)ExtractSubstringFrom:(NSString *)sourceString 
      Between:(NSString *)firstString And:(NSString *)secondString { 


      NSRange stringRangeOne = [sourceString rangeOfString:secondString]; 
      NSString *resultString; 

      if (stringRangeOne.location != NSNotFound) { 
      resultString = [sourceString substringToIndex:stringRangeOne.location]; 
      } 

      NSRange stringRangeTwo = [sourceString rangeOfString:firstString]; 

      if (stringRangeTwo.location !=NSNotFound) { 
      resultString = [resultString substringFromIndex:stringRangeTwo.location+stringRangeTwo.length]; 
      return resultString; 
      } 

      else return @"Error!"; 

      //To do... improve error checking 

      } 

Wie kann ich diese Methode mehr Fehler freundlicher zu machen?

Antwort

6

Es gibt verschiedene Möglichkeiten, Fehler dieser Art in Objective C Handhabung:

  • Zurück den Standardwert - in der Regel ist der Standardwert nil ist. Da Objekte in Objective C unter nil Objekte ausführen dürfen, ist dies relativ sicher.
  • Produzieren NSError Objekte - das ist typischer für Fehler, die von Endbenutzern behoben werden können, wie z. B. Verbindungs- und Konfigurationsprobleme. Der unglückliche Nebeneffekt dieser Art von API ist die Notwendigkeit, einen zusätzlichen Parameter einzurichten und zu übergeben.
  • Unter Verwendung einer Assertion - dies ist eine gute Möglichkeit, "Programmierfehler" zu behandeln, d. H. Wenn die Argumente Ihres Programms außerhalb der angegebenen Bereiche liegen.
  • Eine Ausnahme auslösen - diese Option ist in der Sprache verfügbar, aber Apple rät dringend davon ab, sie zu verwenden. Ich habe es hier der Vollständigkeit halber erwähnt, obwohl ich diese Option nie selbst verwende.
+1

+1 für gegen Ausnahmen zu warnen. –

+0

Apples Dokumentation ist ziemlich explizit darüber, wann sie zu verwenden sind. "Programmieren mit Objective-C: Umgang mit Fehlern" hat einen ganzen Abschnitt mit dem Titel "Ausnahmen sind für Programmierfehler". Dafür sind sie da. – quellish

0

Die tatsächliche beste Praxis hier wäre diese Methode innerhalb der Klasse zu nicht tun, sondern Key Value Validation auf die Sache implementieren, die den Wert wird zu akzeptieren, und die Validierung Methode aufrufen, bevor sie eingestellt ist. Sie würden also diese Validierungs-/Mutationslogik aus dieser Methode entfernen und stattdessen in Ihre Validierungsmethode einfügen, und im Controller wird der Wert geändert, die Validierungsmethode genannt wird, bevor der Wert gesetzt wird. Dies gibt Ihrer Validierungslogik die Möglichkeit, den Wert zu ändern (d. H. Zu einem Standardwert) oder einen Fehler zurückzugeben, wenn der Eingabewert nicht in etwas Nutzbares umgewandelt werden kann.

Weitere allgemeine Informationen über Fehler in Objective-C Handhabung siehe Programming With Objective-C: Dealing with Errors und Error Handling Programming Guide

Verwandte Themen