oluşturma/silme için geri alma devre dışı bırakma Temel Veri modelimde, her biri stringValue
özniteliğine sahip olan çeşitli listItem
öğelerine bağlantı veren listItems
adlı bir ilişkim var. Temel olarak, her liste öğesi için bir tane olan NSTextFields
'un bir listesi olan bir denetim oluşturdum. Kontrol, listItems
'a uygun şekilde bağlanmış ve ben bunu ayarlıyorum ki, geri dönüş tuşuna basıldığında, halihazırda düzenlenmiş olanın altında yeni bir alan yaratılır ve odağı yeni alana değiştirir. Yani, esasen, yeni bir öğe eklemek için, kullanıcı Return tuşuna basar.NSManagedObject
Benzer şekilde, kullanıcı düzenleme işlemini bitirir ve düzenlenmiş alan boşsa, alan kaldırılır (boş alanlar yalnızca "düzenleme modunda" gibi görünür). Bu oldukça iyi çalışıyor. Temelde, benim listItem
NSManagedObject alt sınıfta, ben aşağıdakileri yapın:
// 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
Ben karşılaşmamdır sorun bir satır bu şekilde silindiği her seferinde, undoManager kaydolmuş olmasıdır. Bu yüzden, bir satırı düzenlerseniz, Return tuşuna basın (yeni bir satır oluşturur) ve düzenlemeyi bitirmek için tıkladığınızda satır kaybolur. Ancak, daha sonra geri alırsam, boş alan yeniden görünür. Amacım, undoManager tarafından boş alanlarla ilgili silme işlemlerinin yok sayılmasıdır.
Bunun için nasıl giderim? Ben [[[self managedObjectContext] undoManager] disableUndoRegistration]
ve birkaç sıralarda ilişkili enableUndoRegistration
kullanarak denedim (-didTurnIntoFault
gibi, ama ben geri alma kaydı o yönteme öncesinde neler olabileceğini şüpheli) Eğer Çekirdek Veri docs içine daha derin dalış ise