En mi modelo de datos básicos, tengo una relación llamada listItems
que enlaza con varias entidades listItem
, cada una con un atributo stringValue
. Creé un control que es esencialmente una lista de NSTextFields
, uno para cada elemento de la lista. El control está vinculado a listItems
correctamente, y lo he configurado de modo que al presionar la tecla de retorno se crea un nuevo campo directamente debajo del editado actualmente y se cambia el foco al nuevo campo. Entonces, esencialmente, para agregar un nuevo artículo, el usuario presiona Volver.Deshabilitar deshacer para la creación/eliminación de NSManagedObject
Igualmente, si el usuario finaliza la edición y el campo editado actualmente está vacío, el campo se elimina (como en, los campos vacíos solo aparecen durante el "modo de edición", por así decirlo). Esto funciona bastante bien Básicamente, en mi listItem
NSManagedObject subclase, hago lo siguiente:
// 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
El problema que estoy encontrando es que cada vez que se elimina una fila de esta manera, se registra con el UndoManager. Por lo tanto, si edito una fila, presiono Retorno (que crea una nueva fila), y hago clic para terminar la edición, la fila desaparece. Sin embargo, si deshago, reaparece el campo vacío. Mi objetivo es que el undoManager ignore las operaciones de eliminación que involucran campos vacíos.
¿Cómo podría hacerlo? He intentado usar [[[self managedObjectContext] undoManager] disableUndoRegistration]
y la enableUndoRegistration
asociado en varios lugares (como -didTurnIntoFault
, pero sospecho que el registro de deshacer podría estar ocurriendo antes de que el método)