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