Re: KVO Code Breaks Undo
On Mar 28, 2009, at 7:33 AM, Richard Somers wrote:
I have core data document based application with a custom opengl
layer-hosting view. Everything works except when objects are added
or removed from the managed object model the view is not redrawn. So
I add the following to code to redraw the view but then automatic
undo is broken.
// Receive KVO change notifications if objects are added to or removed
// from the array so we can redraw the display. !!!: Breaks undo!
// Respond to KVO change notifications. !!!: Breaks undo!
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:
(id)object change:(NSDictionary *)change context:(void *)context
Any ideas as to why undo stopped working?
You have implemented observeValueForKeyPath:... incorrectly. The main
issue is that you fail to invoke super's implementation, but you are
not using a context to distinguish your observation request from any
observation request made by your superclass(es).
Try this: on a blank line outside of any method, type "observe" and
then ask Xcode to complete the line. From the possible completions,
select 'observeValueForKeyPath - observeValueForKeyPath: definition'.
That will insert a template for the canonical implementation of
observeValueForKeyPath:... into your code. Follow that template and
you should do better.
You might also consider the approach outlined here:
Cocoa-dev mailing list (Cocoa-dev@xxxxxxxxxxxxxxx)
ease do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
This email sent to maillists@xxxxxxxxx