2012-10-16 6 views
8

Voglio usare +[NSException exceptionWithName:reason:userInfo:].Quale nome dovrei usare per il nome dell'eccezione di NSException, in Objective-C?

Ma quale stringa dovrei usare per l'argomento Name:?

Il nome dell'eccezione dovrebbe essere univoco nel progetto?
Oppure posso usare @ "MyException" per tutte le mie eccezioni?

E non so per quale nome di eccezione viene utilizzato.
Dove vengono utilizzati i nomi delle eccezioni?

risposta

6

È possibile utilizzare il nome in @catch (NSException *theErr).

@catch (NSException *theErr) 
{ 
    tst_name = [theErr name]; 
    if ([tst_name isEqualToString:@"name"]) 
} 

quale stringa dovrei usare per argomento nome :?

Tutto ciò che è significativo.

Il nome dell'eccezione dovrebbe essere univoco nel progetto?

No.

O posso usare @ "MyException" per tutta la mia eccezione?

Sì, ma è necessario utilizzare nomi significativi.

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification { 
    // Insert code here to initialize your application 
    NSNumber *tst_dividend, *tst_divisor, *tst_quotient; 
    // prepare the trap 
    @try 
    { 
     // initialize the following locals 
     tst_dividend = [NSNumber numberWithLong:8]; 
     tst_divisor = [NSNumber numberWithLong:0]; 

     // attempt a division operation 
     tst_quotient = [self divideLong:tst_dividend by:tst_divisor]; 

     // display the results 
     NSLog (@"The answer is: %@", tst_quotient); 
    } 
    @catch (NSException *theErr) 
    { 
     // an exception has occured 
     // display the results 
     NSLog (@"The exception is:\n name: %@\nreason: %@" 
       , [theErr name], [theErr reason]); 
    } 
    @finally 
    { 
     //... 
     // the housekeeping domain 
     //... 
    } 
} 

- (NSNumber *)divideLong:(NSNumber *)aDividend by:(NSNumber *)aDivisor 
{ 
    NSException *loc_err; 
    long  loc_long; 

    // validity check 
    loc_long = [aDivisor longValue]; 
    if (loc_long == 0) 
    { 
     // create and send an exception signal 
     loc_err = [NSException 
        exceptionWithName:NSInvalidArgumentException 
        reason:@"Division by zero attempted" 
        userInfo:nil]; 
     [loc_err raise]; //locate nearest exception handler, 
     //If the instance fails to locate a handler, it goes straight to the default exception handler. 
    } 
    else 
     // perform the division 
     loc_long = [aDividend longValue]/loc_long; 

    // return the results 
    return ([NSNumber numberWithLong:loc_long]); 
} 

Date un'occhiata a Understanding Exceptions and Handlers in Cocoa

+0

grazie per la tua risposta! anche il collegamento è utile. l'autore ci consiglia di utilizzare [nomi di eccezioni predefinite] (http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_Constants/Reference/reference.html), ad esempio NSRangeException, nella pagina [pagina2 ] (http://macdevcenter.com/pub/a/mac/2007/07/31/understanding-exceptions-and-handlers-in-cocoa.html?page=2). –

1

In definitiva, l'intento di aggiungere un'eccezione in questo modo è quello di rilevare un problema nel più breve tempo possibile, segnalarlo, e permettere la diagnosi.

Come tale, se si sceglie un nome di eccezione univoco per il proprio progetto o specifico per il problema (cioè linea di origine, metodo) dipende da quale fornirà le migliori informazioni diagnostiche.

I nomi delle eccezioni possono essere condivisi tra le tue app, in quanto verranno segnalate dall'app per identificare da dove ha origine l'eccezione.

Problemi correlati