Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/95.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在ios应用程序中维护单次尝试捕获块_Ios_Try Catch - Fatal编程技术网

如何在ios应用程序中维护单次尝试捕获块

如何在ios应用程序中维护单次尝试捕获块,ios,try-catch,Ios,Try Catch,我的项目中有10个类,目前我在所有10个类的每个方法中都放置了try-catch块,以捕获异常,这似乎是一个庞大的代码 现在,我想在整个项目中维护一个try-catch块,这意味着如果我的10个类中都发生了任何异常,那么try-catch块应该捕获这些异常 有可能这样做吗 NSArray *arr=[[d1 objectForKey:@"Time"] componentsSeparatedByString:@" "]; NSArray *arr1=[[arr objectAtIndex:1]

我的项目中有10个类,目前我在所有10个类的每个方法中都放置了try-catch块,以捕获异常,这似乎是一个庞大的代码

现在,我想在整个项目中维护一个try-catch块,这意味着如果我的10个类中都发生了任何异常,那么try-catch块应该捕获这些异常

有可能这样做吗

 NSArray *arr=[[d1 objectForKey:@"Time"] componentsSeparatedByString:@" "];
 NSArray *arr1=[[arr objectAtIndex:1] componentsSeparatedByString:@":"];
这里我的对象“时间”来自服务。 因此,如果对象为空,则可能导致 数组超出索引异常。 我知道我可以通过比较字符串的长度来解决这个问题。所以,假设在某些情况下,我忘记了比较长度。 在这种情况下,我希望捕获异常并将其发布到服务器

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

}
@catch(NSException*异常){
NSString*stacktrace=[exception.reason stringByReplacingOccurrencesOfString:@”“with String:@”“];
//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];//将异常发布到我的服务器。
ErrorView*ErrorView=[[ErrorView alloc]initWithNibName:@“ErrorView”捆绑包:nil];[self-presentViewController:ErrorView动画:无完成:nil];
}

谢谢。

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

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


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

您确定正确使用了try-catch块吗?它们用于iOS编程,但非常罕见,我还没有用Objective-C编写过。你可以这样做,但如果你只是调试代码,您可能只是想打开一个异常断点。@DBoyer谢谢您的回复。这不是使用try-catch块的好方法吗?请演示一两个示例,并解释为什么要使用try/catch。这应该是一件非常罕见的事情,不常见。@AaronBrager不,我打算将崩溃报告发布到我的服务器上,而不是为了调试。那么,当崩溃发生时,我如何向用户显示其他视图,是不是不可能/如果你想了解更多细节,这是一本非常好的读物:Aaron,有趣的文章,谢谢!我想我只是在传播教条。:)尽管Swift没有异常机制这一事实表明了苹果的想法。