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