检测核心数据的删除
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
}
如果 managedObjectContext
是 nil
,这意味着该对象已从 Core Data 中删除。
编辑
这 answer 提供了一种更好的方法来检测托管对象是否已从 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
}
如果 managedObjectContext
是 nil
,这意味着该对象已从 Core Data 中删除。
编辑
这 answer 提供了一种更好的方法来检测托管对象是否已从 Core Data 中删除。
我建议您重新考虑整个注销(清除资源)方法,因为您的方法将来不会扩展。