Trong mô hình Dữ liệu cốt lõi của tôi, tôi có mối quan hệ được gọi là listItems
liên kết với một số thực thể listItem
, mỗi đối tượng có thuộc tính stringValue
. Tôi đã tạo một điều khiển về bản chất là một danh sách của NSTextFields
, một cho mỗi mục danh sách. Điều khiển được gắn với listItems
đúng cách và tôi đã thiết lập nó để nhấn phím trả về tạo trường mới ngay dưới trường hiện được chỉnh sửa và thay đổi tiêu điểm sang trường mới. Vì vậy, về cơ bản, để thêm một mục mới, người dùng nhấn Return. Tương tự, nếu người dùng kết thúc chỉnh sửa và trường hiện đang chỉnh sửa trống, trường sẽ bị xóa (như trong, các trường trống chỉ xuất hiện trong "chế độ chỉnh sửa", để nói). Điều này hoạt động khá tốt. Về cơ bản, trong listItem
NSManagedObject lớp con của tôi, tôi làm như sau:Tắt hoàn tác việc tạo/xóa 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
Vấn đề tôi đang gặp là mỗi lần liên tiếp được xóa theo cách này, nó đăng ký với undoManager. Do đó, nếu tôi chỉnh sửa hàng, nhấn Return (tạo hàng mới) và nhấp chuột để kết thúc chỉnh sửa, hàng sẽ biến mất. Tuy nhiên, nếu sau đó tôi hoàn tác, trường trống sẽ xuất hiện trở lại. Mục tiêu của tôi là xóa các thao tác liên quan đến các trường trống được bỏ qua bởi undoManager.
Tôi sẽ làm như thế nào? Tôi đã thử sử dụng [[[self managedObjectContext] undoManager] disableUndoRegistration]
và liên kết enableUndoRegistration
ở một số điểm (chẳng hạn như -didTurnIntoFault
, nhưng tôi nghi ngờ rằng đăng ký hoàn tác có thể xảy ra trước phương pháp đó)