在Objective-C中,我应该使用什么名称作为NSException的异常名称?

时间:2012-10-16 11:49:44

标签: iphone objective-c

我想使用+[NSException exceptionWithName:reason:userInfo:]

但是我应该为参数Name:使用什么字符串?

项目中的例外名称是否应该是唯一的?
或者我可以使用@“MyException”来表示我的所有异常?

我不知道用于什么例外名称。
使用的例外名称在哪里?

2 个答案:

答案 0 :(得分:6)

您可以在@catch (NSException *theErr)中使用该名称。

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

我应该使用什么字符串作为参数名称:?

任何有意义的事情。

  

项目中的例外名称是否应该是唯一的?

没有

  

或者我可以使用@“MyException”来处理所有异常?

是的,但你应该使用有意义的名字。

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

查看Understanding Exceptions and Handlers in Cocoa

答案 1 :(得分:1)

最终,以这种方式添加例外的目的是尽快发现问题,报告并允许诊断。

因此,您是选择项目特有的例外名称,还是特定于问题的例外名称(即源代码,方法)取决于哪个名称将为您提供最佳诊断信息。

可以在您的应用中共享异常名称,因为应用会报告这些异常名称,以确定异常的来源。