检测核心数据的删除

Detect deletion of Core Data

额外信息:

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

当应用程序尝试刷新用户的访问代码时,他们可能会收到 "could not refresh" 响应,并且应用程序会将用户注销(在此应用程序中一次只能登录一台设备)。

在注销方法中,我删除了所有应用程序设置并清空核心数据,然后我设置了一个新的rootViewController并执行makeKeyAndVisible

问题:

现在您已经了解了所有这些,设置 rootViewController 调用 viewWillDisappear,这反过来会尝试在 Core Data 中不再存在的对话上设置 draft 变量。 ..

我该怎么做才能解决这个问题?

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

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

如果 managedObjectContextnil,这意味着该对象已从 Core Data 中删除。

编辑

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

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