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

Reply via email to