【问题标题】:XCode Simulator CoreData not stored: Where to call save managed context?XCode Simulator CoreData 未存储:在哪里调用保存托管上下文?
【发布时间】:2016-11-23 15:59:49
【问题描述】:

我有一个父级和一个子级托管上下文。我调用父托管上下文以两种方法保存其数据:

  • applicationWillTerminate
  • applicationDidEnterBackground

当我使用模拟器并单击顶部的“停止”按钮时,两者都没有被调用并且上下文没有被保存。当然,在手机本身上,当正常使用该应用程序时,一切都像魅力一样。如果我在模拟器中单击“Home”按钮并返回应用程序然后终止,那么它当然会被保存,因为调用了 applicationDidEnterBackground。

因此,如果模拟器正确,我可能必须添加其他地方来保存背景上下文,或者这是模拟器的错误,或者我错误地退出了模拟器。你能帮助我吗?我需要更改任何内容还是应该只使用模拟器中的“技巧”来存储数据?

【问题讨论】:

  • 我认为按下停止按钮只会杀死进程而不保存应用程序状态。
  • 停止按钮被视为软崩溃,这种情况在真实设备中无法重现。

标签: ios objective-c xcode core-data


【解决方案1】:

可以使用这些方法保存您的数据,但它们不应该是您这样做的唯一地方。事情可能会出错,超出您的控制范围,最好不要丢失用户数据。例如,当您的应用程序在内存中有大量未保存的更改时,手机的电池可能会突然没电。实际上,您在模拟这种情况方面做得很好。

此外,未保存的更改越多,应用所需的内存就越多。如果你保存了数据,你以后可以随时查找,这样 Core Data 就可以清除它的缓存、重新故障对象等。

只要存在不应丢失的新更改,您就应该保存更改。具体何时保存取决于您的应用,但几乎可以肯定不仅仅是这两种方法。一种常见的模式是,只要 UI 指示用户已完成某项任务,就应保存与该任务相关的数据。

【讨论】:

    猜你喜欢
    • 2014-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-14
    • 1970-01-01
    • 1970-01-01
    • 2011-08-16
    相关资源
    最近更新 更多