Re: [MacRuby-devel] How to retrieve an observer's context?
Hi Laurent, Thanks for the help. Did you mean to set the context ivar on the observer or on the subject? Wouldn't setting it on the observer result in the last registration 'winning' if the observer is watching more than one subject? Ed On Apr 20, 2009, at 4:28 PM, Laurent Sansonetti wrote: 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 ___ MacRuby-devel mailing list MacRuby-devel@lists.macosforge.org http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
Re: [MacRuby-devel] How to retrieve an observer's context?
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@lists.macosforge.org http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel ___ MacRuby-devel mailing list MacRuby-devel@lists.macosforge.org http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
[MacRuby-devel] How to retrieve an observer's context?
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@lists.macosforge.org http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel