【问题标题】:Core Data Persistence over application instances应用程序实例上的核心数据持久性
【发布时间】:2018-12-30 22:06:13
【问题描述】:

我成功保存了核心数据上下文。 当我删除应用程序实例(仅实例,而不是应用程序本身)时,核心数据上下文中所有保存的托管对象也被删除。但我想保留这些对象。 这是我的代码的快照。 当我第一次运行应用程序时,此代码将“aaban”写入核心数据上下文。并保存。

现在第二次,如果我不删除应用程序实例(不是应用程序本身),此代码将打印“aaban”。 但是如果我删除应用程序实例(不是应用程序本身),这将不会打印“aaban”。

【问题讨论】:

  • context.save() 被调用?
  • 是的。让我也分享一下该代码。 func applicationDidEnterBackground(_ application: UIApplication) { self.saveContext() }
  • @aaban-tariq-murtaza :通常您不会等到应用程序进入后台才能将数据保存到持久存储中,而是当您认为您拥有稳定的数据时更新您的核心数据。我们无法为您提供像 self.saveContext() 这样的方法名称,我们不知道您在其中实现了什么,所以请发布代码,以便我们进一步帮助您
  • 每当我创建一个托管实例时。我也用来保存。看到这段代码\n let city = City(context: SharedData.shared().managedContext!)\n city.id = (item[CONSTANTS.JSON_KEYS.LIST_HOME_CITY_ID] as!String\n SharedData.shared().managedContext?。保存()
  • 即使我也检查了底层的sqlite,sqlite也有保存的数据。但是当我删除应用程序实例(不是应用程序本身)时,这个 sqlite 数据也被删除了。

标签: ios sqlite core-data persistence data-persistence


【解决方案1】:

如果必须,只存储相对 URL 而不是绝对 URL,因为 iOS 8 应用沙箱的绝对 URL 会在每次应用重新启动时发生变化。这就是为什么您会看到 BAF03763-B294-4EBB-AB9B-06B29B8EDB80 更改为 C7669201-1606-4596-B420-87A543569DDD

每次重新启动应用程序时,您都应该只获取您的 sqlite 商店的路径。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-25
    • 1970-01-01
    • 2011-01-16
    • 1970-01-01
    • 2012-06-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多