2

MacRuby プロジェクトで外部の Obj-C クラスを使用しようとしていますが、それをインポートする方法がわかりません。具体的には、MacRuby 0.5 プロジェクト内で ObjectiveResource を使用したいと考えています (ActiveResource はまだ動作しないため)。

MacRuby の「framework」コマンドまでは理解できましたが、実際のフレームワークにのみ適用されるようです。

質問: object-resource ディレクトリはどこにインストールすればよいですか? Ruby コード内でこれらのクラスを取得するにはどうすればよいですか?

助けてくれてありがとう!

4

3 に答える 3

4

ClassName.new を使用してクラスに直接アクセスできます。

プロジェクトに Utilities という名前のクラスがあり、そのクラスに greeting: という名前のメソッドがある場合、そのように呼び出します。

util = Utilities.new
puts util.greeting("Good morning")

require またはフレームワークの宣言は必要ありません。意外と簡単じゃないですか。MacRubyのPeepcodeスクリーンキャストを見て、これを発見しました。

于 2010-05-02T13:30:50.333 に答える
3

また、Objective-c から Ruby コードを呼び出すことに興味がある場合は、MacRuby メーリング リストからの抜粋を次に示します。

MacRuby ランタイムが初期化されると、Ruby からすべての Objective-C オブジェクトにアクセスできるようになります。たとえば、Foo という名前の Objective-C クラスがある場合、「Foo.new」などを実行できます。

もう 1 つの可能性は、 を使用して、Objective-C オブジェクトを Ruby メソッドに渡すこと[NSObject performRubySelector:]です。

ルビー:

class Foo
  def test(o)
    o.something
  end
end

オブジェクト:

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

(編集) とはいえ、おそらく最も簡単な方法は、Ruby ファイルに対応するメソッドを含むヘッダー ファイルを追加することです。

次の Ruby クラスがあるとします。

class Foo
  def bar(moo)
    "a string like #{moo}"
  end
end

したがって、同等のヘッダー ファイルは次のようになります。

@interface Foo : NSObject
- (NSString *)bar:(NSString *)moo
@end

次に、ヘッダーだけ#importを追加し、Obj-C コード内から標準の Obj-C クラスとして Ruby クラスを使用します。

NSString *aString;
Foo *myFoo;
aString = [myFoo bar:@"me"];

奇妙に思えるかもしれませんが、うまくいきます。本質的には、コンパイラの口を閉じて、メソッドの欠落について文句を言わずにコードをコンパイルさせるという考え方です。その後、実行時に機能します (Obj-C 自体の動的な性質のおかげだと思います)。ところで、Ruby の typeless 動作を模倣するために、ヘッダー ファイルにメソッド シグネチャを記述する際に id を使用します。

于 2010-05-03T02:08:05.813 に答える
0

ObjC バンドルを作成するこの例を見ましたか?

于 2010-03-17T14:04:38.653 に答える