【发布时间】:2009-12-15 13:17:25
【问题描述】:
我在 iPhone 的核心数据中构建了一个数据模型。我还有一个为该模型工作的 NSUndoManager。问题是我在一个实体上有某些属性,我不想在撤消过程中受到影响,而其他属性我确实想回滚。在不彻底改变事物的情况下,这是否可能。如果是这样,最好的方法是什么。
【问题讨论】:
标签: iphone cocoa cocoa-touch core-data
我在 iPhone 的核心数据中构建了一个数据模型。我还有一个为该模型工作的 NSUndoManager。问题是我在一个实体上有某些属性,我不想在撤消过程中受到影响,而其他属性我确实想回滚。在不彻底改变事物的情况下,这是否可能。如果是这样,最好的方法是什么。
【问题讨论】:
标签: iphone cocoa cocoa-touch core-data
读了几遍……
NSUndoManager 方法:
- (void)disableUndoRegistration
- (void)enableUndoRegistration
只要 NSManagedObjectContext 方法就可以工作
- (void)processPendingChanges
之后直接调用。
例如,您可以在托管对象上添加以下方法来设置天气,否则对属性的更改不应添加到撤消堆栈中:
- (void)setColor:(UIColor *)aColor undo:(BOOL)shouldUndo{
if (shouldUndo)
[self setColor:aColor];
else{
NSManagedObjectContext *moc = self.managedObjectContext;
[moc processPendingChanges]; //Disable undo
[moc.undoManager disableUndoRegistration];
[self setColor:aColor]; //Preform change
[moc processPendingChanges]; //Enable undo
[moc.undoManager enableUndoRegistration];
}
}
请注意,如果您有一堆不想添加到撤消堆栈的更改,这可能不是最有效的方法。
【讨论】: