在我的核心数据模型中,我有一个关系叫做
listItems
哪个链接到几个
listItem
实体,每个实体
stringValue
属性。我创建了一个控件,它本质上是
NSTextFields
,每个列表项一个。控件绑定到
李斯特
正确地说,我已经设置好了,这样按下返回键就可以直接在当前编辑的字段下创建一个新字段,并将焦点更改为新字段。因此,本质上,要添加一个新项目,用户按回车键。
同样,如果用户结束编辑,当前编辑的字段为空,则该字段将被删除(如中所述,空字段仅在“编辑模式”期间出现,也就是说)。这很管用。基本上,在我的
李斯特
nsmanagedObject子类,我执行以下操作:
// Don't allow nil values
if (!value && [[self.recipe ingredients] count] > 1) {
for (EAIngredientRef *ingredient in [self.recipe ingredients]) {
if ([[ingredient sortIndex] integerValue] > [[self sortIndex] integerValue]) {
[ingredient setSortIndex:[NSNumber numberWithInteger:([[ingredient sortIndex] integerValue]-1)]];
}
}
[[self managedObjectContext] deleteObject:self];
return;
}
// Code to handle if it is a real value
我遇到的问题是,每当以这种方式删除一行时,它都会向UndoManager注册。因此,如果编辑一行,请按回车键(这将创建一个新行),然后单击离开以结束编辑,该行将消失。但是,如果我随后撤销,空字段将重新出现。我的目标是让UndoManager忽略涉及空字段的删除操作。
我该怎么办?我试过用
[[[self managedObjectContext] undoManager] disableUndoRegistration]
以及
enableUndoRegistration
在几个地方(如
-didTurnIntoFault
,但我怀疑撤消注册可能发生在该方法之前)