Nel mio modello Core Data, ho una relazione denominata listItems
che collega a diverse entità listItem
, ciascuna con un attributo . Ho creato un controllo che è essenzialmente un elenco di NSTextFields
, uno per ogni elemento dell'elenco. Il controllo è legato a listItems
correttamente e l'ho impostato in modo che premendo il tasto Invio venga creato un nuovo campo direttamente sotto quello attualmente modificato e lo stato attivo venga modificato nel nuovo campo. Quindi, in sostanza, per aggiungere un nuovo elemento, l'utente preme Invio.Disabilita Annulla per creazione/eliminazione di NSManagedObject
Allo stesso modo, se l'utente termina la modifica e il campo attualmente modificato è vuoto, il campo viene rimosso (come in, i campi vuoti appaiono solo durante "modalità modifica", per così dire). Funziona piuttosto bene. In sostanza, a mio listItem
NSManagedObject sottoclasse, faccio la seguente:
// 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
Il problema che sto incontrando è che ogni volta che una riga viene eliminata questo modo, si registra con l'UndoManager. Pertanto, se modifico una riga, premi A capo (che crea una nuova riga) e fai clic su di esso per terminare la modifica, la riga scompare. Tuttavia, se annullo, ricompare il campo vuoto. Il mio obiettivo è che le operazioni di eliminazione che coinvolgono campi vuoti vengano ignorate da undoManager.
Come dovrei fare questo? Ho provato con [[[self managedObjectContext] undoManager] disableUndoRegistration]
e l'associato enableUndoRegistration
in diversi punti (come -didTurnIntoFault
, ma ho il sospetto che la registrazione di annullamento potrebbe accadere prima di tale metodo)