2013-04-22 86 views
3

我想要捕捉所有崩溃和异常,并添加其他信息(例如用户)以保存它。 现在,我的想法是在didFinishLaunchingWithOptions中包装try-catch块。在catch块中,我记录异常和附加信息,然后重新抛出它。 这是实施该方法的正确方法吗? 在此先感谢。在iOS中捕捉崩溃和异常

更新了代码:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
@try { 
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
    // Override point for customization after application launch. 

    self.loginViewController = [[LoginViewController alloc] init]; 
    self.window.rootViewController = self.loginViewController; 
    [self.window makeKeyAndVisible]; 
} 
@catch (NSException *exception) { 
    // Save the exception description and additional info here 
    ... 
    // And re-throw it. 
    [exception raise]; 
} 
    return YES; 

} 

进一步更新: 我曾尝试上面的代码我自己,也不能捕捉到的异常发生在其他地方。 我知道谷歌分析iOS SDK有“sendUncaughtExceptions”属性来做类似的事情。 我想如果我自己实现类似的功能可以提供更多的灵活性,因为我们有我们自己的错误服务器(我会上传错误日志到我们的服务器)。 任何建议感激。

解决方案: 最后,我从这个博客的解决方案: http://www.cocoawithlove.com/2010/05/handling-unhandled-exceptions-and.html

+0

你想记录什么类型的“附加信息”? – 2013-04-22 04:11:15

+0

@Bhargavi:我想跟踪特定的设备和用户信息(例如设备ID,电子邮件等)。 – yibuyiqu 2013-04-22 04:23:36

+0

@ShivanRaptor:我不问如何使用try-catch块。我想知道如果我在didFinishLaunchingWithOptions中放入try-catch并包装所有前面的行,是否会捕获所有潜在的崩溃,即使我在其他地方启动线程? – yibuyiqu 2013-04-22 04:29:48

回答

0

你调查过TestFlight API?这是非常容易实现,自由和听起来像它会完成你想要的。它具有内置的远程异常处理和远程日志记录(你可以像使用NSLog一样使用TFLog)。您可以登录UDID并跟踪用户的beta版或企业版发布,只需注意,Apple不会允许您在应用商店应用中收集UDID,因此您必须为该版本禁用它 - 您仍然会崩溃日志和其他指标,他们只是匿名的。

www.testflightapp.com