我的项目中有10个Classes,目前我在所有10个类中的每个方法中放置了try catch块来捕获异常,这似乎是一个庞大的代码。
现在我想在整个项目中维护一个单一的try catch块,意味着如果我的所有10个类中都发生了任何异常,那些应该被try catch块捕获。
是否可以这样做......
NSArray *arr=[[d1 objectForKey:@"Time"] componentsSeparatedByString:@" "];
NSArray *arr1=[[arr objectAtIndex:1] componentsSeparatedByString:@":"];
我的对象“时间”来自服务。 所以如果对象是空的,它可能会导致 数组超出索引Exception。 我知道我可以通过比较String的长度来解决这个问题。如果想在某些情况下忘记比较长度。 在这种情况下,我想捕获异常,我想将其发布到我的服务器。
@catch (NSException *exception) {
NSString *stacktrace=[exception.reason stringByReplacingOccurrencesOfString:@"<" withString:@""];
stacktrace=[stacktrace stringByReplacingOccurrencesOfString:@">" withString:@""];
// NSString *strClass = NSStringFromClass([self class]);
NSString *strClass = [NSString stringWithFormat:@"%@ : %@",NSStringFromClass([self class]), NSStringFromSelector(_cmd)];
Item* myStore = [Item sharedStore];
myStore.strErrorDescription=exception.name;
myStore.strErrorStack=stacktrace;
myStore.strErrorPageName=strClass;
[myStore PostError];// To Post the exception to My server.
ErrorView *errorView=[[ErrorView alloc]initWithNibName:@"ErrorView" bundle:nil]; [self presentViewController: errorView animated:NO completion:nil];
}
谢谢。
答案 0 :(得分:0)
这里真正的答案是你做错了。
Objective-C中的异常与Java或Ruby等其他语言中的异常不同。特别是,它们往往是“不可恢复的”,这意味着一旦某些代码抛出异常,关于内存分配状态等的许多假设都会变错,并且您的程序可能正在崩溃。
整体方法Apple recommends是将异常视为程序员错误的症状。您给出的示例与他们所做的相同:忽略检查NSArray的长度。您的目标应该是在开发过程中找到并消除这些内容;最好的办法是让你的程序因异常而崩溃,然后查找并修复有问题的代码。