在我的核心數據模型中,我有一個叫做listItems
的關係,它鏈接到幾個listItem
實體,每個實體都有一個stringValue
屬性。我創建了一個基本上是NSTextFields
列表的控件,每個列表項目一個。該控件正確地綁定到listItems
,並且我已經設置了該按鈕,以便按下返回鍵將在當前編輯的項目下直接創建一個新字段,並將焦點更改爲新字段。所以,基本上,要添加一個新項目,用戶按下Return。同樣,如果用戶結束編輯,並且當前編輯的字段爲空,則該字段將被刪除(因爲空字段僅在「編輯模式」期間出現,所以可以這麼說)。這工作得很好。基本上,我listItem
NSManagedObject子類,我做到以下幾點:禁用撤銷創建/刪除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的註冊。因此,如果我編輯一行,按回車鍵(它會創建一個新行),然後點擊結束編輯,該行就會消失。但是,如果我撤消,空白字段會再次出現。我的目標是讓撤銷管理器忽略涉及空字段的刪除操作。
我該怎麼辦?我已經使用[[[self managedObjectContext] undoManager] disableUndoRegistration]
並在幾個點的相關enableUndoRegistration
嘗試(如-didTurnIntoFault
,但我懷疑撤銷註冊可能在此之前,方法發生)