iOS应用程序异常处理

时间:2014-03-26 07:05:25

标签: ios iphone objective-c exception ipod

基础知识:使用XCode(最新版本),Objective-C / C ++模块开发的iOS应用程序

我遇到了一个可能需要专家帮助的问题....我的应用程序设计为在iOS平台上运行,在所有硬件上运行,但是我遇到了问题。该应用程序在我的iPod和iPad上的所有模拟器上运行良好,但我的一些测试人员使用iPhone,问题只出现在该硬件平台上。

基本问题是应用程序似乎在各个方面出现异常,有时在使用初期,有时在一个多小时之后。我怀疑它可能是一个内存泄漏或无效的呼叫只是偶尔会让它丑陋的头脑,但我需要找出答案。我已经将应用程序编码为在“调试”版本中运行时创建日志文件,我可以将它们部署到拥有iPhone的测试人员,但我无法始终访问他们的手机来检索日志文件。

我有一个内置于应用程序中的机制来发送屏幕捕获的电子邮件,我可以轻松地修改它以将日志文件发送给我,但我需要一种方法来触发它。

我的问题:我来自基于MS的世界,我知道如何从我的应用程序中捕获异常,包括添加内存探测器,自动报告问题并在应用程序实际退出之前调用适当的方法。有没有办法从应用程序本身内部捕获这些问题并在应用程序结束之前自动报告它们并丢失所有可用信息?

此外,如果有一些方法以编程方式遍历/转储调用堆栈,将其写入我的日志文件,就像模拟器在XCode中使用模拟器时提供的那样,并保存该信息,它会非常有帮助。

感谢。

p.s。:我知道这不是一个简单的请求,而且回复也很可能并不简单,所以提前感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

我已将此代码用于全局级异常处理。我遇到了一个问题,即任何运行应用程序的点都会产生异常并且应用程序崩溃了,所以我实现了应用程序级异常处理。

请参阅此链接上的堆栈溢出可能对您有用。

How do you implement global iPhone Exception Handling?

在AppDlegate类的applicationDidFixnishLaunchin方法中编写此NSSetUncaughtExceptionHandler(& uncaughtExceptionHandler)代码行

    -(BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:  
      (NSDictionary*)launchOptions
     {   
         NSSetUncaughtExceptionHandler(&uncaughtExceptionHandler); 

       EDIT:
         if( [[NSUserDefaults standardUserDefaults] boolForKey:@"isExceptionOccured"])
         {
        //call sever code here
       [[NSUserDefaults standardUserDefaults] setBool:FALSE forKey:@"isExceptionOccured"];
       }
       //rest of your code
      }


       void uncaughtExceptionHandler(NSException *exception)
      {


       NSLog(@"Exception Got %@",[exception description]);
        //do what ever you what here 
     //can save any `bool` so that as aaplication  run on immediate next launching of crash
     //could intimate any thing

    EDIT: 

    [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"isExceptionOccured"];

      }