Кроме того, если вы заинтересованы в вызове Ruby-код из Objective-C, вот отрывок из списка рассылки MacRuby:
После выполнения MacRuby инициализации, вы можете получить доступ ко всем объектам вашей Objective-C из Рубин. Например, если у вас есть класс Objective-C с именем Foo, вы можете сделать «Foo.new» и т. Д.
Другая возможность - передать объекты Objective-C методу Ruby с помощью [NSObject performRubySelector:]
.
рубин:
class Foo
def test(o)
o.something
end
end
ObjC:
MyObject *o = [MyObject new]; // where o responds to -something
MacRuby *runtime = [MacRuby sharedRuntime];
id foo_obj = [runtime evaluateString:@"new Foo"];
[foo_obj performRubySelector:@selector(test:) withArguments: o, NULL];
Заканчивать весь API здесь: http://www.macruby.org/trac/browser/MacRuby/trunk/include/ruby/objc.h
Тема: http://lists.macosforge.org/pipermail/macruby-devel/2010-April/004715.html
(Edit) Тем не менее, возможно, самый простой путь - добавить заголовочный файл для вашего рубинового файла, содержащий ваш метод ds эквивалентов.
Предположим, что у вас есть этот рубин класс:
class Foo
def bar(moo)
"a string like #{moo}"
end
end
поэтому эквивалентный заголовочный файл будет что-то вроде этого:
@interface Foo : NSObject
- (NSString *)bar:(NSString *)moo
@end
Теперь, только #import
заголовок и использовать классы рубин в качестве стандартного Obj-C из вашего кода Obj-C:
NSString *aString;
Foo *myFoo;
aString = [myFoo bar:@"me"];
Это может показаться странным, но оно работает. По сути, идея состоит в том, чтобы закрыть рот компилятора и позволить ему скомпилировать ваш код, не жалуясь на недостающие методы.Затем во время работы он будет работать (я полагаю, благодаря динамической природе самого Obj-C). Кстати, чтобы имитировать румяное беспричинное поведение, id - ваш друг в написании меток подписи в файле заголовка.
Да, я пробовал это, но я вообще не работаю для меня. Я немного приблизился, создав пакет вручную в соответствии с этим (http://www.mail-archive.com/[email protected]/msg00940.html), но это очень болезненный процесс и я не совсем получил работу. Я полагаю, что код ObjectiveResource (предназначенный для iPhone-приложений) не подходит для этого? – beno1604
Какие ошибки вы получаете при попытке расслоения? Можете ли вы отредактировать сообщение, чтобы включить сообщения об ошибках? – sal