I'm still searching for some answers to my original question regarding calling 
across from objective-C to MacRuby, and vice-versa.  I've done some 
experimenting, and had some success with a private framework, but still haven't 
figured out some of the bridging stuff...

I created an objective-C framework, and I can instantiate an object of a class 
(Foo) defined in the framework (linked into the EmbeddedMacRuby project), and 
am able to call a method on that class from a MacRuby script...

    f = Foo.new()
    x = f.doLoopTest1(10)

However, I'm unable to call a method on my objective-C UI controller class.  
I'm working off the EmbeddedMacRuby project, and have added a method to 
MyController (which is the objective-C class controller for the UI).

The method is defined as:

- (int) testCall1:(int) loopCount

I've tried various methods of calling it..

    m = MyController
    x = m.testCall1.testCall1(10)

However, I'm getting the following error message (indicating that it doesn't 
know about the method)...

    NoMethodError: undefined method `testCall1' for MyController:Class 
(NoMethodError)

    (null)

How do I expose methods of an objective-C class (not in a framework, but in the 
main application) to MacRuby code so that I can call into it from MacRuby?  
I've tried gen_bridge_metadata (see original message) with no success.  I'm not 
sure if gen_bride_metadata is required to expose the objective-c controller 
object to the MacRuby code, or if I'm just not setting something else up 
properly.

I'm also still curious about how to call from objective-C code in my 
application (from MyController, for instance) to a MacRuby function, and then 
grab the return value in objective-C when the MacRuby function returns.  Can 
anyone point me to some sample code?

I've updated to the latest version of MacRuby.

Thanks.

-Larry


On Oct 14, 2010, at 6:58 PM, Larry Wilson wrote:

> 
> I've been playing around with the EmbeddedMacRuby project.  
> 
> I'd like to be able to:
> 
>  a) Run user scripts (written in Ruby) from within a cocoa application (so 
> far, so good)
>  b) Call ruby functions from objective-c
>  c) Call my private objective-c API's from Ruby functions and scripts
> 
> I'm having problems with b & c.
> 
> I'm assuming that the mechanism for b & c is different than that used to 
> execute a Ruby script.  It looks like gen_bridge_metadata script should be 
> used to make my objective-c class and methods visible to Ruby.
> 
> However, when I try to run gen_bridge_metadata on a simple header file that 
> declares an objective-c class and a couple of test methods, 
> gen_bridge_metadata doesn't produce anything in the output file other than 
> the 3 lines of header information...
> 
>  1 <?xml version='1.0'?>
>  2 <!DOCTYPE signatures SYSTEM 
> "file://localhost/System/Library/DTDs/BridgeSupport.dtd">
>  3 <signatures version='0.9'/>
> 
> I'm running the tool as follows (I've also tried a number of other 
> variations):
> 
>       gen_bridge_metadata -c '-I.' MyController.h -o 
> MyController.bridgesupport 
> 
> I'm running 10.6.4,   ruby 1.8.7 , with macRuby 0.7 installed.
> 
> I also have ruby1.9 installed.
> 
> Questions...
> 
> 1) Shouldn't this produce at least simple output with information regarding 
> the class and method calls?
> 
> 2) Is there some documentation (or examples) somewhere that shows how to set 
> things up properly to enable items b & c?  I haven't been able to find 
> anything in the documentation, or on the web that actually demonstrates how 
> to do this, and gen_bridge_metadata doesn't seem to be cooperating.
> 
> Any pointers or suggestions welcome.
> 
> 
> Thanks.
> 
> -Larry
> 
> _______________________________________________
> 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