NSUndoManager and runModalForWindow:
I have a simple Core Data app which displays a list of entities in 开发者_运维问答the main window. To create or add new entities, I use a second modal window with a separate managed object context so changes can be undone/redone without interfering with the main managed object context.
The editing window is launched using runModalForWindow:
. If I make a series of discrete changes in this modal window, doing a single undo results in undoing ALL my changes. I tried setting the run loop modes of NSUndoManager
(obtained from the second managed object context) to contain NSModalPanelRunLoopMode
but that didn't appear to make any difference.
If I don't launch the window using runModalForWindow:
and simply use makeKeyAndOrderFront:
, everything works as expected.
Has anyone run into this before?
Kevin
Are you by chance using the Cocoa Application Kit for your application? Not sure why it wouldn't do that on your main window, and only on the overlay.. but this might be in the right direction..
The following quote is from the Mac Dev Center, NSUndoManager Class Reference:
When performing undo an NSUndoManager saves the operations reverted so that you can redo the undos. If used in a Cocoa Application Kit-based application, NSUndoManager groups all operations within a single cycle of the run loop, so that performing an undo reverts all changes that occurred during the cycle.
精彩评论