我想使用+[NSException exceptionWithName:reason:userInfo:]
。
但是我应该为参数Name:
使用什么字符串?
项目中的例外名称是否应该是唯一的?
或者我可以使用@“MyException”来表示我的所有异常?
我不知道用于什么例外名称。
使用的例外名称在哪里?
答案 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]);
}
答案 1 :(得分:1)
最终,以这种方式添加例外的目的是尽快发现问题,报告并允许诊断。
因此,您是选择项目特有的例外名称,还是特定于问题的例外名称(即源代码,方法)取决于哪个名称将为您提供最佳诊断信息。
可以在您的应用中共享异常名称,因为应用会报告这些异常名称,以确定异常的来源。