If you didn't want to use a category, you could do:

orderedSet = NSOrderedSet.orderedSetWithArray(["1", "2", "3"])
orderedSet.class.send(:define_method, :each) do
   self.array.each do |item|
       yield item
   end
end

orderedSet.each do |item|
    puts item
end

This method also has the advantage of capturing local scope, if needed.

hth
kam

On Nov 17, 2011, at 8:22 AM, techzen wrote:

> The Cbjective-C way to handle this would be to put a category that provided 
> an `each` method on NSOrderedSet. Then when you called `each` it would just 
> work. Ruby has a similar functionality but I can't remember right now what 
> it's called. 
> 
> Using a category would be optimal in the case of Core Data because in some 
> instances you can actually evoke a method as part of a key path when sending 
> Key-Value messages.
> 
> Shannon
> 
> On Nov 16, 2011, at 4:11 AM, Jean-Denis MUYS wrote:
> 
>> I have this ordered Core Data to-many relation named "operations" that I 
>> want to iterate over. I wrote:
>> 
>>   self.operations.each { | operation | operation.doSomething }
>> 
>> However this fails because self.operations returns an NSOrderedSet and 
>> NSOrderedSet doesn't have an 'each' method.
>> 
>> I was able to use the 'enumerateObjectsUsingBlock' method of NSOrderedSet 
>> which is working fine.
>> 
>> My question is: what would be the MacRuby way to add an 'each' method to 
>> NSOrderedSet?
>> 
>> Thanks,
>> 
>> Jean-Denis
>> 
>> 
>> 
>> _______________________________________________
>> 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 mailing list
MacRuby-devel@lists.macosforge.org
http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel

Reply via email to