如何在ios App中维护单个try catch块

时间:2014-10-29 05:27:52

标签: ios try-catch

我的项目中有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];

}

谢谢。

1 个答案:

答案 0 :(得分:0)

这里真正的答案是你做错了。

Objective-C中的异常与Java或Ruby等其他语言中的异常不同。特别是,它们往往是“不可恢复的”,这意味着一旦某些代码抛出异常,关于内存分配状态等的许多假设都会变错,并且您的程序可能正在崩溃。

整体方法Apple recommends是将异常视为程序员错误的症状。您给出的示例与他们所做的相同:忽略检查NSArray的长度。您的目标应该是在开发过程中找到并消除这些内容;最好的办法是让你的程序因异常而崩溃,然后查找并修复有问题的代码。