2014-01-07 1 views
0

Я работаю с CoreData по адресу OSX (но я думаю, что проблема такая же для iOS).Как отключить NSUndoManager для определенных действий/объектов с помощью CoreData?

Я хотел бы отключить управление отменой для создания/удаления NSManagedObjects. Но, если возможно, я бы сохранил отмену управления атрибутами (например, NSStrings и т. Д.) Моих объектов.

Как я могу это сделать?

Если возможно, хотелось бы глобальным решением, например, подкласс MyManagedObject из NSManagedObject с перезаписаны методами (awakeFromInsert, prepareForDeletion).

ответ

1

Вы можете решить ассоциировать не NSUndoManager к NSManagedObjectContext:.

[self.managedObjectContext setUndoManager:nil] ; 
3

NSUndoManager имеет disableUndoRegistration и enableUndoRegistration методы, позволяющие это делать. Вам необходимо перехватить операции, которые вы не хотите отменять, и отключить/включить диспетчер отмены по мере необходимости. Обратите внимание, что вызовы для включения и выключения должны быть сбалансированы (не вызывать один из них, не вызывая (или не вызывая) другого. Также вы несете ответственность за то, чтобы отменить любую операцию не приведет к недействительному состоянию (это цель beginUndoGrouping)

+0

Я надеюсь, что я не мог найти способ сделать это глобально: все творения/делеции бы игнорироваться 'NSUndoManager' ... – Colas

+0

Как часто эта функция будет использоваться? И как часто это приведет к контексту, который не может быть сохранен (проблемы проверки)? Эта функция может быть полезна для вас, но это маловероятно чтобы быть полезным для многих людей, поэтому я не могу сказать, что я ожидаю, что это будет добавлено. Вы можете обернуть его в подкласс или вспомогательные методы ... – Wain

+0

Действительно, даже просто то, что вы думаете, может вызвать проблемы для вас в будущем - осторожно протектора ... – Wain