1

写真をウェブサイトにアップロードするために NSinvocation を設定しようとしています。私はこれをやっています:

  1. nsinvocation オブジェクトを設定する
  2. UIImage* を nsinvocation オブジェクトに引数として追加し、その他の引数もいくつか追加します。
  3. 必要に応じて nsinvocation を呼び出す
  4. nsinvocation を呼び出したときに呼び出される関数は、UIImage にアクセスできません。NSInvalidArgumentException が発生します。

しばらく掘り下げた後、UIImage を引数として NSInvocation オブジェクトに追加し、元に戻そうとすると、別のメモリ アドレスが返されます。これは正常ですか?

//最初に、メモリ アドレス "A" を持つ有効な UIImage "imgHolder" があります...

NSInvocation *myInvocation = [NSInvocation invocationWithMethodSignature:...

[myInvocation setArgument:imgHolder atIndex:5];

//さて、奇妙な部分は...

UIImage *checkImg;

[myInvocation getArgument:&checkImg atIndex:12];

// checkImg のメモリ アドレスは "B" です!

checkImg を使用しようとすると、有効な UIImage ではないと思わせるさまざまな例外が発生します。

何が起こっているのですか?checkImg のメモリ アドレスは imgHolder のメモリ アドレスと同じであるべきではありませんか?

4

1 に答える 1

1

[myInvocation setArgument:imgHolder atIndex:5];

imgHolder が UIImage* の場合、imgHolder ではなく &imgHolder を渡す必要があります。

于 2009-08-23T20:54:21.100 に答える