快速的核心数据。应用程序丢失数据?

Posted

技术标签:

【中文标题】快速的核心数据。应用程序丢失数据?【英文标题】:Core Data in swift. App loses data? 【发布时间】:2015-02-25 14:45:39 【问题描述】:

我对我的应用程序的运行方式感到困惑。 应用程序的主要部分是带有一些统计数据的燃料加注日志。它使用 swift 和核心数据。 但是由于某些原因,在少数设备上有时它会在应用程序关闭时丢失用户数据(未置于后台) - 我不明白为什么。我也无法在模拟器或我的设备上看到它。 但是我的一些朋友向我报告了这个错误。

我的应用基于此示例http://jamesonquave.com/blog/core-data-in-swift-tutorial-part-3/。

我的应用程序没有翻译成英文,所以我不知道是否可以将链接放在这里。

当用户关闭应用或重新加载他的设备时,核心数据怎么可能是空的?

【问题讨论】:

您需要发布一些代码让我们能够提供帮助。 需要哪部分代码?我的应用程序基于可以通过我的问题中的链接找到的示例。您需要知道在我的设备上的应用程序运行良好,并且我在 ios7 的模拟器中进行了尝试。我想知道 - 怎么可能丢失核心数据? 我们无法浏览整个教程来找出您可能做错了什么。从您的应用程序中发布相关的核心数据代码,例如,您将上下文保存在哪里。 【参考方案1】:

您是否在主托管对象上下文中调用了 save 方法?

在 Xcode projet 模板中,当您的应用程序终止时调用的方法应该保存:

- (void)applicationWillTerminate:(UIApplication *)application 
    // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
    // Saves changes in the application's managed object context before the application terminates.
    [self saveContext];

由于某些原因,此 saveContext 方法可能会失败或不被调用。在这种情况下,如果您从未自己保存过上下文,那么数据库可能是空的。

例如在 managedObjectContext 中插入或更新数据后,您可以调用:

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

【讨论】:

【参考方案2】:

我最近遇到了同样的问题,即使在appDelegate 中的applicationWillTerminate 方法中使用self.saveContext(),我发现我没有在Entity 的所有属性中保存值。当我在所有属性中保存数据时,我在重新启动应用程序时没有丢失数据。

【讨论】:

以上是关于快速的核心数据。应用程序丢失数据?的主要内容,如果未能解决你的问题,请参考以下文章

核心数据 - 重新启动应用程序时部分数据丢失

核心数据/SQLite 存储偶尔数据丢失

Bundle Identifier Changed 核心数据丢失

e:应用重启后核心数据自引用关系丢失

应用升级后核心数据关系丢失

Swift 3 核心数据问题 - 所有数据丢失