0

私が使用する場合

[self performSelectorOnMainThread:@selector(uploadDidEnd:) withObject:foo
        waitUntilDone:YES]

-(void)uploadDidEnd:(id)sender メソッド内

送信者はどのオブジェクトですか? 呼び出しで foo はカスタムクラスですか? オブジェクトでこの送信者を変換するにはどうすればよいですか?

キャストしようとしていますが、持っています

'-[_NSThreadPerformInfo CountY]: unrecognized selector sent to instance 0x52bbd0'

通知では、送信者から NSNotification へのキャストを使用し、通知には object プロパティがありますが、NSThread については見つかりませんでした。

ありがとう。

4

2 に答える 2

2
  1. a と宣言された引数は、senderメソッドに渡される唯一のパラメーターです。performSelectorOnMainThread:withObject:waitUntilDone:withObject実行されるセレクタの後にその引数を渡すので、はい、ここでfoouploadDidEnd に渡されます:

  2. キャストは解決策ではありません。Objective-C は動的言語であるため、キャストによってコンパイラの警告が解消されたとしても、オブジェクトの実際の実装は変更されないため、当然メッセージに応答しません。

于 2012-02-29T18:08:43.727 に答える
2

次のことが考えられます。

[self performSelectorOnMainThread:@selector(uploadDidEnd:)
      withObject:foo
      waitUntilDone:YES]

以下と同じように:

[self uploadDidEnd:foo];

それがあなたがやろうとしていることだと確信していますか?

その場合:uploadDidEnd:実装内で、foo を実際のオブジェクト タイプにキャストできます。

- (void)uploadDidEnd:(id)sender
{
  FooClass *foo = (FooClass *)sender;
  [foo doSomething]; // or whatever
}
于 2012-02-29T18:30:43.853 に答える