提出NSException的正确方法是什么?

时间:2013-06-24 11:14:04

标签: objective-c nsexception

我创建了一个宏,如果在调试模式下编译,将检查以确保该方法已被具有相同名称的子类调用(以阻止外部类调用它)。如果不是这样,它将抛出异常:

#ifdef DEBUG

#define CHECK_INHERITANCE() \
do { \
    NSString *this = [NSThread callStackSymbols][0]; \
    NSString *parent = [NSThread callStackSymbols][1]; \
    NSError *error = NULL; \
    NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"\\[\\w+ ((\\w+:)+)\\]" options:NSRegularExpressionCaseInsensitive error:&error]; \
    NSTextCheckingResult *resultThis = [regex firstMatchInString:this options:0 range:NSMakeRange(0, this.length)]; \
    NSString *strThis = [this substringWithRange:[resultThis rangeAtIndex:1]]; \
    NSTextCheckingResult *resultParent = [regex firstMatchInString:parent options:0 range:NSMakeRange(0, parent.length)]; \
    NSString *strParent = [parent substringWithRange:[resultParent rangeAtIndex:1]]; \
    if(![strThis isEqualToString:strParent]) [NSException raise:NSGenericException format:@"Must be called from a subclass"]; \
} while (0);

#else

#define CHECK_INHERITANCE() //

#endif

我测试了它并且它可以工作,但它抛出的NSException并没有给我任何可以暗示它崩溃的堆栈跟踪,也没有显示消息“必须从一个调用子类”。我只是在主线程上获得了“0 __kill”和一堆汇编程序。我怎么能让它给我一个更有用的例外?我做错了吗?

0 个答案:

没有答案