【问题标题】:Detect deletion of Core Data检测核心数据的删除
【发布时间】:2015-07-31 06:16:42
【问题描述】:

额外信息:

我有一个消息视图,其中有一个UITextView,我将其中的文本保存在viewWillDisappear 中的对话变量draft 中。

当应用尝试刷新用户的访问代码时,他们可能会收到“无法刷新”响应,并且应用会将用户注销(此应用中一次只能登录一台设备)。

在注销方法中,我删除所有应用设置并清空Core Data,然后我设置一个新的rootViewController并执行makeKeyAndVisible

问题:

既然您知道这一切,设置rootViewController 会调用viewWillDisappear,而后者又会尝试在Core Data 中不再存在的对话上设置draft 变量...

我能做些什么来解决这个问题?

【问题讨论】:

    标签: ios swift core-data appdelegate


    【解决方案1】:

    在设置草稿时,最简单、最快的解决方法是:

    if let context = conversation.managedObjectContext {
       // you have a valid conversation, you can assign the draft
    }
    

    如果managedObjectContextnil,则表示该对象已从Core Data 中删除。

    编辑

    answer 提供了一种更好的方法来检测托管对象是否已从 Core Data 中删除。

    我建议您重新考虑整个注销(清除资源)方法,因为您的未来不会扩展。

    【讨论】:

    • 但是我不知道接下来会发生在哪里,当我想写入coredata对象时,是否需要每次检查managedObjectContext是否为nil?刷新随时可能失败。
    • 你为什么不重新考虑你的整个方法呢?当您注销时,为什么不摆脱所有资源,包括您已经获取的托管对象?如果从与这些对象交互的同一控制器调用注销方法,您可以直接摆脱资源。否则,您可以使用通知来让每个人都知道已经或将要执行注销。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-20
    • 2012-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多