iOS 在应用程序崩溃时保存数据

标签 ios core-data

我在我的一个项目中有一个要求,用户要求在应用程序突然崩溃的情况下在本地保存数据。它基于表单的应用程序让用户在表单中填写大量数据,如果应用程序突然崩溃,那么用户将丢失所有输入的数据。

App 正在使用 Core Data 在本地保存数据。

有一点我们将输入的数据保存在核心数据中,但不是在每秒钟用户填充数据时。

此外,如果应用程序崩溃,核心数据也会消失。

最佳答案

事实上,如果您的应用程序崩溃,回调:

- (void)applicationWillTerminate:(UIApplication *)application

不会被调用。仅当由于某些原因系统需要关闭您的应用程序时(通常是因为资源稀少或因为您的后台作业在允许的最长时间后仍在工作)或者如果您使用的是 < iOs 4,才会调用此方法。您不需要有任何方法可以知道您的应用程序何时会崩溃(但是当您重新启动该应用程序时,您可以知道它是否已经崩溃)。

因此对于您的特定情况,您有两种解决方案:

  • 使用具有快速触发率的 NSTimer,或者在每次编辑字段并更新核心数据上下文然后将其保存在磁盘上时调用一个函数。

    NSError *error = nil;
    [managedObjectContext save:&error]
    

    您是否在上下文中设置了 persistentStoreCoordinator?如果不是,core-data 将永远不会将您的数据保存在磁盘上。

  • 崩溃不会突然出现,找到可能发生崩溃的地方并修复它,或者如果你不能,使用 try-catch 来保持你的应用程序运行(但请尝试不要那样做……)。

希望对你有帮助

关于iOS 在应用程序崩溃时保存数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29141089/

相关文章:

ios - @NSManaged 有什么作用?

ios - PAC 获取失败,出现错误 [NSURLErrorDomain :-1003]

ios - fatal error : unexpectedly found nil while unwrapping an Optional value inside an entity

iphone - 通过 NSValueTransformer 将字符串转换为核心数据

ios - 通过 CoreData 属性显示 tableView 项目

ios - 如何观察表格 View 中的对象数量?

ios - 不同 View 的 CAGradientLayer

ios - 屏幕锁定时的用户通知

iphone - UItabBar 改变 View Controller

ios - 为什么 Apple 文档说从 UIApplicationDelegate 获取 ManagedObjectContext 是错误的?