[MacRuby-devel] Bindings only working one-way
Michael Winterstein
parzival at mindspring.com
Sat Nov 22 09:53:02 PST 2008
>
> for example:
> attr_accessor :billy # will create setter and getter for billy with
> all the appropritate KVO methods
>
> def updateMyValue(sender) #called from a button perhaps
> setBilly(4)
> end
>
> #or setValue:4 forKey:billy
>
> #@billy = 4 will not work, because it bypasses the accessor methods
>
>
> So you don't need to override the accessors unless you are doing some
> additional work.
>
> If you do override the accessors then you will have to put the whole
> willChangeValueForKey, and didChangeValueForKey calls in your
> overwritten method.
> In your code below you do override the accessor, and therefore lose
> the KVO.
>
>
This turned out to be the key. The way to make it work automatically
is just to use attr_accessor, but "setX(value)" within the program to
modify it (even though that method isn't one you wrote). I had
tried .= and self.X =, neither of which work, but that one does.
It even works with the Matrix binding to selectedTags. I get the
sense it may be trickier with something more complex or dynamic -
which I may eventually want to do, but I'm happy with this for now.
The trickier one was actually the Booleans. When you bind to a
Boolean variable, it's now being set in a non-Ruby way. What that
means is:
something if X
no longer works the way you'd expect - this is always true.
Instead you need to do:
something if X == true
I know some people prefer the more explicit style anyways, and maybe
that's one reason why. Or it could be considered a bug. As I
understand it, the NS YES and NO are integer values which is sort of
troublesome with the way Ruby treats 'false'.
Thanks,
Michael
More information about the MacRuby-devel
mailing list