NSUndoManager 检测核心数据实体的实际删除
Posted
技术标签:
【中文标题】NSUndoManager 检测核心数据实体的实际删除【英文标题】:NSUndoManager detect actual deletion of Core Data entities 【发布时间】:2014-10-21 09:25:43 【问题描述】:我正在寻找一种方法来了解 Core Data 实体何时真正从数据存储中删除。
我将NSUndoManager
连接到我的NSManagedObjectContext
,到目前为止一切正常。
现状
我正在构建一个应用程序,允许用户创建Room
s 并在每个房间添加一些图片。当用户想要创建一个新房间时,我使用以下代码在 NSUndoManager 中创建一个操作:
[[[NSManagedObjectContext MR_defaultContext] undoManager] beginUndoGrouping];
[[[NSManagedObjectContext MR_defaultContext] undoManager] setActionName:@"Create Room"];
然后是undo
,当用户按下取消。这会导致撤消所有更改并删除新创建的临时 Room
对象。
然后用户将Picture
s 用于这个临时的Room
对象。我将实际图像存储在磁盘上,并将filePath
作为NSString
属性存储在Picture
实体中。当用户手动删除房间中的图片时,我使用Picture
上的prepareForDeletion:
方法从磁盘中删除图片。
问题
现在想象一下用户稍后打开Room
实体,删除Picture
然后按取消 的情况。 NSUndoManager
现在撤消所有操作。当用户删除图片时,实际图像从磁盘中删除。 但是,Picture
对象由 NSUndoManager 恢复,filePath
现在设置为物理删除的图像。
有没有办法知道图片何时真正被删除(即在 prepareForDeletion 中:)?我的意思是,它被用户删除了,并且没有被撤消操作带回来?
我真的不应该每 x 天从我的应用文档中删除任何内容并清理未链接的照片吗?或者我应该跟踪用户删除了哪个Picture
s,并在用户按save 而不是cancel 时将它们排队等待删除?
【问题讨论】:
【参考方案1】:“解决”了这个问题,只是从不通过任何用户操作从磁盘中删除,并在每次应用启动时运行清理方法。
【讨论】:
以上是关于NSUndoManager 检测核心数据实体的实际删除的主要内容,如果未能解决你的问题,请参考以下文章
取消编辑:NSUndoManager 或单独的 NSManagedObjectContext 进行编辑?
核心数据获取实际存储在persistentStore中的数据,而不是实体的所有对象(persistentStored +最新创建的obj)