0
- (void)TargetHit:(int)target{

    void (^threadBlock)(void) = ^{
        NSLog(@"respond to selector %d", [self respondsToSelector:@selector(changeImageOfTarget:)]);

        [[NSOperationQueue mainQueue] performSelectorOnMainThread:@selector(changeImageOfTarget:) withObject:[NSNumber numberWithInt:target] waitUntilDone:YES];
        [NSThread sleepForTimeInterval:1.0]; 
        [[NSOperationQueue mainQueue] performSelectorOnMainThread:@selector(changeImageOfTarget:) withObject:[NSNumber numberWithInt:target] waitUntilDone:YES];
    };

    dispatch_async(dispatch_queue_create(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), threadBlock);
}

コードがセレクターに応答するように戻る理由は理解できますがYES、実行しようとするとエラーメッセージが表示され、アプリがクラッシュします。

[NSOperationQueue changeImageOfTarget:]: unrecognized selector sent to instance 0x6a39810'

も同じです

 [[NSThread currentThread] performSelectorOnMainThread:@selector(changeImageOfTarget:) withObject:[NSNumber numberWithInt:target] waitUntilDone:YES];

メソッドまたは@selectorメインスレッドでどのように実行できますか?

4

1 に答える 1

4

selfセレクターに応答する場合があります。問題はそうで[NSOperationQueue mainQueue]はないということです。

メインスレッドでメソッドまたは@selectorを実行するにはどうすればよいですか?

アクションを実行するオブジェクトで呼び出すだけです。

[self performSelectorOnMainThread:@selector(changeImageOfTarget:) withObject:[NSNumber numberWithInt:target] waitUntilDone:YES];
于 2012-06-21T12:00:46.307 に答える