2014-10-29 59 views
0

我在我的项目中有10个类,目前我在所有10个类的每个方法中都放置了try catch块来捕获异常,这似乎是一个庞大的代码。如何在iOS应用程序中维护单个try catch块

现在我想维护一个单一的try catch块通过项目,意味着如果任何异常发生在我应该通过try catch块捕获的所有10个类中。

是否有可能做这样的... ...

NSArray *arr=[[d1 objectForKey:@"Time"] componentsSeparatedByString:@" "]; 
NSArray *arr1=[[arr objectAtIndex:1] componentsSeparatedByString:@":"]; 

这里我的目标“时间”是从服务的到来。 所以如果对象为空,可能会导致 数组超出索引Exception。 我知道我可以通过比较字符串的长度来解决。所以,如果在某些情况下忘记比较长度。 在这种情况下,我想捕捉异常,我想将其发布到我的服务器。

@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]; 

} 

谢谢。

+2

你确定你正在使用try-catch块吗?它们用于iOS编程,但很少,我仍然没有在Objective-C中编写过一个。 – DBoyer 2014-10-29 05:30:29

+0

你可以做到这一点,但如果你只是调试代码,你可能只想打开一个异常断点。 – 2014-10-29 05:33:29

+0

@DBoyer谢谢reply.is,这不是使用try catch块的好方法 – siva 2014-10-29 05:33:36

回答

0

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

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

总体方法Apple recommends是将异常视为程序员错误的症状。你给的例子与他们做的是一样的:忽略检查一个NSArray的长度。您应该致力于在开发过程中发现并消除这些问题;最好的办法就是让程序因异常而崩溃,然后找到并修复有问题的代码。

+0

那么我该如何向用户展示一些其他视图,当发生崩溃时,是不是冒险/ – siva 2014-10-29 06:41:20

+0

这是一个很不错的阅读,如果你想要更多的细节:http://club15cc.com/code/objective-c/dispelling- nsexception-myths-in-ios-can-we-use-try-catch-finally – 2014-10-29 07:26:06

+0

亚伦,有趣的文章,谢谢!我想我只是传播教条。 :)尽管Swift没有异常机制这一事实是Apple在这里的想法。 – dpassage 2014-10-30 19:13:03