2016-05-20 7 views
0

Wenn es einen Code, der @throw nicht von @catch block gefangen?

@try 
{ 
    @throw [NSException new]; 
} 
@catch (NSException ex) 
{ 
    NSLog(@"exception caught"); 
} 

in diesem Fall wie

aussieht, wird der Code nicht Block @catch geht, sondern die Anwendung abstürzt. Wie sollten wir Ausnahmen fangen Würfen von @throw in Objective-c

Antwort

3

[NSException new] instanziiert eine null Klasse, weil es keine nützlichen Informationen enthält. Es nicht eine NSException Instanz erzeugen und als solche Ihre:

@catch (NSException *ex) 
{ 
    NSLog(@"exception caught"); 
} 

ist nutzlos. Wenn Sie jedoch verwenden:

@catch (id exception) 
{ 

} 

Sie werden dieses leere Objekt fangen.

Ein Auszug aus der offiziellen Dokumentation auf Handling Exceptions:

Sie eine Folge von @catch Fehlerbehandlungsblöcken haben. Jeder Block behandelt eine Ausnahme Objekt eines anderen Typs. Sie sollten auf die am wenigsten spezifischen Art von Ausnahmeobjekt (die am wenigsten spezifischen Typ ist id) ...

+0

Dank der meisten spezifischen diese Folge von @catch Blöcke bestellen, die :) für alle anderen gearbeitet , hier ist der Link, der die gleiche näher erläutert: https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/Exceptions/Tasks/HandlingExceptions.html#//apple_ref/doc/uid/20000059 -SW1 – prabodhprakash

Verwandte Themen