[MacRuby-devel] Crash with NSUInteger in delegate method

Laurent Sansonetti laurent.sansonetti at gmail.com
Thu May 21 15:35:21 PDT 2009


Hi Łukasz,

Since the bark method is defined in Ruby, it means its return value
and arguments are objects (id). So, if you want to call the method
from Objective-C, you must pass an Objective-C object. In this case,
an NSNumber object should do it.

If the bark method was actually an Objective-C method overwritten in
Ruby, then passing the C integer would have worked.

Also, it is generally safer to use the -[performRubySelector:] method
when calling specialized Ruby methods (those with optional or splat
arguments). The Ruby method calling semantics differ a little bit from
Objective-C so it won't always work.

HTH,
Laurent

2009/5/21 Łukasz Adamczak <lukasz at czak.pl>:
> My question boils down to a simpler case:
>
> Ruby:
> --------
> class Dog
>  def bark(num = 1)
>    num.times { puts "woof!" }
>  end
> end
>
> Objective-C:
> ----------------
> id dog = [[MacRuby sharedRuntime] evaluateString:@"Dog.new"];
> [dog bark:3];
>
>
> Passing Objective-C int to a Ruby method crashes it.
>
> Assuming I don't have access to the Objective-C side (the caller) -
> how do I make it work?
>
> Thanks!
>
>
> --
> Regards,
> Łukasz Adamczak
> _______________________________________________
> 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