On Apr 17, 2008, at 9:01 PM, Hal Mueller wrote:

Look at Malcolm Crawford's Graphics Bindings example, which contains among other things two methods on GraphicsView to start and stop observation when an object of that class is created or destroyed.
http://homepage.mac.com/mmalc/CocoaExamples/controllers.html

That looks like he's unbinding observers that he set up in code. All of my bindings are set up in Interface Builder.

I use -removeObserver:forKeyPath: for each of the keypath notifications I have requested, and then I count on the superclass's dealloc method to take care of its own keypath notifications.

The problem is that I haven't programmatically requested any keypath notifications so my object doesn't know who its observers are or what the key paths are. I can manually keep track of the observers if I make them all IBOutlets and connect them in Interface Builder, but I still don't know what the key paths are. And making them all IBOutlets and keeping track of them seems to defeat the purpose of bindings.

You can also use -removeObserver: but that seems like a blunt instrument to me, especially since I don't know what the superclass is counting on.

I need something more like "removeObserved" since I'm trying to stop my object from being observed by others. It's too bad I can't do anything with the pointer returned by the observationInfo method. I can see in gdb that it has all the information I need, but I can't get at it.

It would help to see your dealloc and close methods, especially if you think you're having trouble with a notification that you didn't register for.

I don't have a close method and my dealloc just calls the accessor methods to deallocate my collection classes:

- (void)dealloc
{
    [self setZoneSelector:nil];
    [self setDumpSelector:nil];
    [self setPpfArrayTypes:nil];
    [self setIgorUnitConversions:nil];
    [super dealloc];
}

sample accessor:
- (void)setZoneSelector:(NSString *)newZoneSelector
{
    [_zoneSelector release];
    _zoneSelector = [newZoneSelector mutableCopy];
}

I must be missing a basic concept because this all seems opposite of what I'm expecting. This isn't an object that is observing others. It's being observed _by_ others and I want to break that connection. When my app was simply an NSDocument, it worked fine: when the window closed, the bindings were automatically broken. But now that I'm using NSDocument and NSWindowController, they aren't.

I should also mention that I'm using Tiger.

Thanks for the help,
-Steve
_______________________________________________

Cocoa-dev mailing list ([email protected])

Please 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:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to [EMAIL PROTECTED]

Reply via email to