如何使用 CoreData 为某些操作/实体禁用 NSUndoManager?
Posted
技术标签:
【中文标题】如何使用 CoreData 为某些操作/实体禁用 NSUndoManager?【英文标题】:How to disable the NSUndoManager for certain actions/entities with CoreData? 【发布时间】:2014-01-07 14:52:21 【问题描述】:我在OSX
上与CoreData
一起工作(但我猜ios
的问题是一样的)。
我想禁用创建/删除NSManagedObjects
的撤消管理。但是,如果可能的话,我会保留对我的实体的属性(如NSStrings
等)的撤消管理。
我该怎么做?
如果可能,我想要一个全局解决方案,例如子类 MyManagedObject
of NSManagedObject
带有覆盖的方法(awakeFromInsert
、prepareForDeletion
)。
【问题讨论】:
【参考方案1】:NSUndoManager
有 disableUndoRegistration
和 enableUndoRegistration
方法来实现这一点。您需要拦截您不想撤消的操作,并酌情禁用/启用撤消管理器。请注意,启用和禁用的调用必须平衡(不要在没有调用(或已经调用)另一个的情况下调用一个。确保撤消任何操作不会导致无效状态也是您的责任(这是beginUndoGrouping
)。
【讨论】:
我希望我能找到一种在全球范围内执行此操作的方法:NSUndoManager
将忽略所有创建/删除...
该功能多久使用一次?它多久会导致无法保存的上下文(验证问题)?此功能可能对您有用,但对很多人不太可能有用,所以我不能说我希望它会被添加。您可以将其包装在子类或辅助方法中...
确实,即使只是按照自己的想法去做也可能会在未来给您带来麻烦——小心行事...
我不明白为什么阻止撤消/重做会产生问题!
您的实体有任何非可选属性吗?【参考方案2】:
您可以决定将NSUndoManager
与NSManagedObjectContext
联系起来:
[self.managedObjectContext setUndoManager:nil] ;
【讨论】:
以上是关于如何使用 CoreData 为某些操作/实体禁用 NSUndoManager?的主要内容,如果未能解决你的问题,请参考以下文章
OSX CoreData:仅针对某些实体的问题:+entityForName:在此模型中找不到名为“myEntity”的实体
如何在symfony中禁用doctrine的软删除(软删除)过滤器