我有一个应用程序需要知道它何时崩溃(用于调试目的)。当应用程序关闭时,它会在委托(delegate)中调用 - (void)applicationWillTerminate:(UIApplication *)application
。
根据我的理解,它不应该在应用程序崩溃时调用该行,但出于某种原因它会调用。 (如果应用程序没有崩溃,我有代码在 NSUserDefaults
中设置一个值,但如果它崩溃了,也不会改变任何东西。)
一些细节:当调用 - (void)applicationDidBecomeActive:(UIApplication *)application
时,我程序中的 NSUserDefaults
键设置为 YES。当 - (void)applicationWillTerminate:(UIApplication *)application
被调用时,相同的键被设置为 NO。下次启动时,应用程序会检查该键是否设置为 YES 或 NO。计划是检查 key 是否为 YES,如果是,则意味着它没有正确关闭(即崩溃)。
我应该用什么来检查它是否崩溃?
最佳答案
您的问题是写入 NSUserDefaults
不一定将该值同步到磁盘。通常,NSUserDefaults
将每 30 秒左右将更改同步到磁盘。发生的事情是您将 YES
存储在 NSUserDefaults
中,然后在同步到磁盘之前崩溃,因此在下次启动时它会再次返回到 NO
。此处的修复是在存储 YES
值后调用 -[NSUserDefaults synchronize]
以强制磁盘同步立即发生。
请注意,由于 -synchronize
相对昂贵,因此您应该只在绝对需要确保立即将值写入磁盘时才使用它。你描述的情况符合条件。很少有其他情况。
关于iphone - applicationWillTerminate 在崩溃时被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7099461/