[MacRuby-devel] How to retrieve an observer's context?
Laurent Sansonetti
lsansonetti at apple.com
Mon Apr 20 13:28:56 PDT 2009
Hi Edward,
Context arguments in Objective-C are generally void pointers, which
makes them hard to use in Ruby. Also, since we run in Objective-C GC
mode, objects could potentially be collected since contexts do not set
up AFAIK write barriers.
I would recommend to set up an instance variable on your observer
instead (and pass nil as the context).
observer.instance_variable_set(:@context, your_context)
And later in your observer method, retrieve the ivar.
Laurent
On Apr 20, 2009, at 8:57 AM, Edward Hynes wrote:
> I'd like to use contexts when registering some observers, but have
> been unable to retrieve them, getting a "can't convert C/Objective-C
> value `0x2822731' of type `v' to Ruby object" instead. The
> following code, for example, will trigger the error
>
> class Subject
> attr_accessor :abc
> end
>
> class Observer
> def observeValueForKeyPath keyPath, ofObject:object, change:change,
> context:context
> context[0]
> end
> end
>
> subject = Subject.new
> observer = Observer.new
>
> subject.addObserver observer, forKeyPath:'abc', options:0,
> context:'a context'
> subject.setAbc 'some value'
>
> Is there a way to retrieve an observation context? Or is there an
> alternative way for observers to distinguish among multiple
> registrations for a given object/keyPath?
>
> Thanks,
> Ed
>
> _______________________________________________
> MacRuby-devel mailing list
> MacRuby-devel at lists.macosforge.org
> http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
More information about the MacRuby-devel
mailing list