[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