В моей модели базовых данных у меня есть отношение, называемое listItems
, которое ссылается на несколько listItem
сущностей, каждая с атрибутом stringValue
. Я создал элемент управления, который по сути является списком NSTextFields
, по одному для каждого элемента списка. Элемент управления привязан к listItems
должным образом, и я настроил его так, что нажатие клавиши возврата создает новое поле непосредственно под редактируемым в данный момент и изменяет фокус на новое поле. Таким образом, чтобы добавить новый элемент, пользователь нажимает Return.
Аналогичным образом, если пользователь заканчивает редактирование, а редактируемое в настоящий момент поле пусто, поле удаляется (как, например, пустые поля появляются только в «режиме редактирования», так сказать). Это работает довольно хорошо. По сути, в моем подклассе listItem
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. Таким образом, если я редактирую строку, нажимаю Return (что создает новую строку) и щелкаю, чтобы закончить редактирование, строка исчезает. Однако, если я затем отменю, пустое поле появляется снова. Моя цель - сделать так, чтобы операции удаления, включающие пустые поля, игнорировались undoManager.
Как бы я поступил об этом? Я пытался использовать [[[self managedObjectContext] undoManager] disableUndoRegistration]
и связанный enableUndoRegistration
в нескольких местах (например, -didTurnIntoFault
, но я подозреваю, что регистрация отмены могла происходить до этого метода)