In meinem Core Data-Modell habe ich eine Beziehung mit dem Namen listItems
, die auf mehrere listItem
Einheiten mit jeweils einem stringValue
-Attribut verknüpft. Ich habe ein Steuerelement erstellt, das im Wesentlichen eine Liste von NSTextFields
ist, eins für jedes Listenelement. Das Steuerelement ist ordnungsgemäß an listItems
gebunden, und ich habe es so eingerichtet, dass beim Drücken der Eingabetaste ein neues Feld direkt unter dem aktuell bearbeiteten Feld erstellt wird und der Fokus auf das neue Feld geändert wird. Um also einen neuen Eintrag hinzuzufügen, drückt der Benutzer die Eingabetaste.Deaktivieren Sie zum Erstellen/Löschen von NSManagedObject Rückgängig
Ebenso, wenn der Benutzer die Bearbeitung beendet und das aktuell bearbeitete Feld leer ist, wird das Feld entfernt (wie in, leere Felder erscheinen nur sozusagen im "Bearbeitungsmodus"). Das funktioniert ziemlich gut. Im Grunde genommen in meiner listItem
NSManagedObject Unterklasse, ich folgende tun:
// 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
Das Problem, das mir begegnet ist, ist, dass jedes Mal, wenn eine Zeile auf diese Weise gelöscht wird, es mit dem undoManager registriert. Wenn Sie also eine Zeile bearbeiten, drücken Sie die Eingabetaste (wodurch eine neue Zeile erstellt wird) und klicken Sie auf Weiter, um die Bearbeitung zu beenden. Die Zeile wird ausgeblendet. Wenn ich dann rückgängig mache, erscheint das leere Feld wieder. Mein Ziel ist es, Löschoperationen mit leeren Feldern vom UndoManager zu ignorieren.
Wie würde ich darüber gehen? Ich habe versucht, [[[self managedObjectContext] undoManager] disableUndoRegistration]
und die dazugehörigen enableUndoRegistration
an mehreren Stellen (zB -didTurnIntoFault
, aber ich vermute, dass die Undo-Anmeldung vor diesem Verfahren könnte geschieht)