iphone - applicationWillTerminate 在崩溃时被调用

标签 iphone objective-c xcode

我有一个应用程序需要知道它何时崩溃(用于调试目的)。当应用程序关闭时,它会在委托(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/

相关文章:

iphone - 将值从 C++ 返回到 Obj-C?

ios - NSString 到 NSDate for yyyy-MM-dd'T'HH :mm:ss. SSS+05:30 格式

iphone - 如何构建类似 iPad App 的终端

objective-c - NSInvalidArgumentException',原因 : '-[__NSCFString isFileURL]: unrecognized selector sent to instance 0x712e450'

iphone - 在我的 xcode 项目中,我创建了一个 Html 文件,我必须在单击按钮时打印数组的包含内容。如何执行此操作

xcode - XCTAssertTrue不会停止例程

ios - 无法在 UISearchController 中为 UITextField 设置正确的背景颜色

iPhone 连接 Facebook。加入可用的页面/组选项?

ios - 获取 Xcode 5 以警告新的 API 调用

ios - Xcode Image Assets 为视网膜设备返回错误的图像