【问题标题】: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 的模拟器中进行了尝试。我想知道 - 怎么可能丢失核心数据?
  • 我们无法浏览整个教程来找出您可能做错了什么。从您的应用程序中发布相关的核心数据代码,例如,您将上下文保存在哪里。

标签: ios swift core-data


【解决方案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 的所有属性中保存值。当我在所有属性中保存数据时,我在重新启动应用程序时没有丢失数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-20
      相关资源
      最近更新 更多