2012-10-16 9 views

Odpowiedz

6

Możesz użyć nazwy w @catch (NSException *theErr).

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

co łańcuch należy używać do nazwy argumentów :?

Cokolwiek znaczącego.

Czy nazwa wyjątku powinna być unikalna w projekcie?

nr

Albo można użyć @ "MyException" dla wszystkich moich wyjątku?

Tak, ale powinieneś używać znaczących nazw.

- (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]); 
} 

Spójrz na Understanding Exceptions and Handlers in Cocoa

+0

dzięki za odpowiedź! link jest również przydatny. autor zaleca nam użycie [predefiniowanych nazw wyjątków] (http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_Constants/Reference/reference.html), na przykład NSRangeException, na stronie [page2 ] (http://macdevcenter.com/pub/a/mac/2007/07/31/understanding-exceptions-and-handlers-in-cocoa.html?page=2). –

1

Docelowo intencją dodając wyjątek w ten sposób, aby wykryć problem jak najszybciej, poinformuj go, i umożliwiają diagnozę.

W związku z tym, niezależnie od tego, czy wybierzesz wyjątek unikatowy dla twojego projektu, czy konkretny problem (np. Linia źródła, metoda), zależy od tego, która zapewni najlepsze informacje diagnostyczne.

Nazwy wyjątków można udostępniać w aplikacjach, ponieważ są one zgłaszane przez aplikację w celu zidentyfikowania źródła pochodzenia.

Powiązane problemy