[MacRuby-devel] rubyfying Cocoa iterators

Kam Dahlin haxie1 at me.com
Thu Nov 17 10:21:47 PST 2011


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 at lists.macosforge.org
>> http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
> 
> _______________________________________________
> 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