快速的核心数据。应用程序丢失数据?
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 的所有属性中保存值。当我在所有属性中保存数据时,我在重新启动应用程序时没有丢失数据。
【讨论】:
以上是关于快速的核心数据。应用程序丢失数据?的主要内容,如果未能解决你的问题,请参考以下文章