From: Laurent S. <lsa...@ap...> - 2007-07-15 13:58:58
|
Oops, please try objc_method :getInt, ['int'] The second argument of objc_method is supposed to be an Array. I will fix the method to accept a String. Laurent On Jul 15, 2007, at 3:55 PM, Motohiro Takayama wrote: > Laurent: > > Thanks for your quick reply. > > I tried your advice, and observed strange behavior. > > class Hoge < OSX::NSObject > objc_method :getInt, 'int' > def getInt > 5 > end > end > > and when call this, NSLog shows: > > 2007-07-15 22:50:15.667 retval[7097] XXX returning ffi type void for > unrecognized encoding 'nt' > > I'm wondering why "i" of int is lack... > > 2007/7/15, Laurent Sansonetti <lsa...@ap...>: >> When creating a Ruby method like this, without providing its ObjC >> runtime signature, RubyCocoa will assume that all arguments and the >> return value are Objective-C objects (of the type 'id'). Because >> there >> is no way for RubyCocoa to know. This is why you get from the ObjC >> world an NSNumber and not an "int". >> >> To work around this, you need to register the Ruby method into the >> ObjC runtime: >> >> def getInt ... end >> objc_method :getInt, 'int' >> >> This will register getInt as a method that doesn't take any argument >> and returns a C integer. >> >> Usually when you are overriding an ObjC method from Ruby, or >> implementing an ObjC informal protocol in Ruby, you don't need to use >> objc_method. But in this special case, it is required. Fortunately, >> most people won't need to use it. >> >> Laurent >> >> On Jul 15, 2007, at 3:01 PM, Motohiro Takayama wrote: >> >>> Hi, >>> >>> I'm wondering how to return simple "int" type value from Ruby code >>> to >>> Objective-C code. >>> Ruby code passes Fixnum, and Objective-C code recieves NSCFNumber >>> instead of simple int. >>> Any suggestion ? >>> >>> >>> Ruby code: >>> >>> class Hoge < OSX::NSObject >>> def getInt >>> 5 >>> end >>> end >>> >>> >>> Objective-C code: >>> >>> Class helper = NSClassFromString(@"Hoge"); >>> id hoge = [[helper alloc] init]; >>> NSLog(@"%@ %d", [[hoge getInt] class], [(NSNumber *)[hoge >>> getInt] >>> decimalValue]); >>> >>> >>> and those show: >>> >>> 2007-07-15 21:52:56.954 retval[5100] NSCFNumber 8448 >>> >>> >>> thanks, >>> >>> -- >>> Motohiro Takayama >>> http://blog.deadbeaf.org/ >>> >>> ------------------------------------------------------------------------- >>> This SF.net email is sponsored by DB2 Express >>> Download DB2 Express C - the FREE version of DB2 express and take >>> control of your XML. No limits. Just data. Click to get it now. >>> http://sourceforge.net/powerbar/db2/ >>> _______________________________________________ >>> Rubycocoa-talk mailing list >>> Rub...@li... >>> https://lists.sourceforge.net/lists/listinfo/rubycocoa-talk >> >> >> ------------------------------------------------------------------------- >> This SF.net email is sponsored by DB2 Express >> Download DB2 Express C - the FREE version of DB2 express and take >> control of your XML. No limits. Just data. Click to get it now. >> http://sourceforge.net/powerbar/db2/ >> _______________________________________________ >> Rubycocoa-talk mailing list >> Rub...@li... >> https://lists.sourceforge.net/lists/listinfo/rubycocoa-talk >> > > ------------------------------------------------------------------------- > This SF.net email is sponsored by DB2 Express > Download DB2 Express C - the FREE version of DB2 express and take > control of your XML. No limits. Just data. Click to get it now. > http://sourceforge.net/powerbar/db2/ > _______________________________________________ > Rubycocoa-talk mailing list > Rub...@li... > https://lists.sourceforge.net/lists/listinfo/rubycocoa-talk |