0

私が作成しているアプリについて、NDA 機能があるため、どれだけ言えるかわかりません。新しいものではないかもしれませんが、自分自身を救いたいと思っています。セレクターを介してxmlDocPtr? もしそうなら、これはどのように可能ですか?char* を取得して NSString に変換できることはわかっていますが、xmlDocPtr には id 型に変換する同じ機能がありますか?

4

1 に答える 1

0

「xmlDocPtrをセレクターに渡す」とはどういう意味ですか?あなたがそれをobj-cオブジェクトに変換しようとしているように見えることを考えると、私はあなたが使用しようとしていると仮定しています-performSelector:withObject:か?メソッドを呼び出すだけの場合は、引数のタイプに制限がないためです。

非obj-cオブジェクトを受け取るセレクターを動的に呼び出す必要がある場合は、2つの選択肢があります。最初の、そして推奨されるアプローチは、を作成することNSInvocationです。

SEL sel = // selector that takes xmlDocPtr
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[target methodSignatureForSelector:sel]];
[invocation setSelector:sel];
[invocation setArgument:&xmlDocPtr atIndex:2]; // 0 is self, 1 is _cmd
[invocation invokeWithTarget:target];
// if you need a return value, use
// typeOfReturnValue retVal;
// [invocation getReturnValue:&retVal];

2つ目は、適切な関数型にキャストobjc_msgSend()してそれを呼び出すことですが、浮動小数点値または構造体値(メソッド引数または戻り値として)が含まれる場合、これはより複雑になります(アーキテクチャに多少依存します)。このアプローチは、obj-cランタイムを快適に使用できる場合にのみ使用してください。

于 2012-05-24T00:11:41.290 に答える