私の Core Data モデルには、それぞれが属性を持つ複数のエンティティにlistItems
リンクするという関係があります。基本的にリスト項目ごとにのリストであるコントロールを作成しました。コントロールは適切にバインドされており、リターン キーを押すと、現在編集中のフィールドのすぐ下に新しいフィールドが作成され、フォーカスが新しいフィールドに変更されるように設定しました。したがって、基本的に、新しい項目を追加するには、ユーザーは Return キーを押します。listItem
stringValue
NSTextFields
listItems
同様に、ユーザーが編集を終了し、現在編集中のフィールドが空の場合、そのフィールドは削除されます (空のフィールドは、いわば「編集モード」の間のみ表示されます)。これはかなりうまくいきます。基本的に、私の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
、そのメソッドの前に元に戻す登録が行われている可能性があります)。