ios - 响应选择器但抛出错误

标签 ios objective-c grand-central-dispatch nsoperationqueue

- (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

最佳答案

self 可能会响应选择器。问题是 [NSOperationQueue mainQueue] 没有。

How am I able to perform a method or @selector on the main thread?

只需在您希望执行操作的对象上调用它:

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

关于ios - 响应选择器但抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11137641/

相关文章:

ios - 在 UITableView 上显示图像的正确方式?

ios - 无法访问 self.parentViewController.property

ios - 如何在 Mkmapview 中拖放注释图钉

ios - 如何监控递归调度队列的任务何时全部完成?

ios - 如何使用for循环和dispatch_after取消操作队列并增加延迟

ios - 在 ScatterPlot Coreplot iOS 中使用直线

ios - 从唯一字符串的json对象中获取字符串

ios - Xcode 关闭控制台输出中的自动布局相关警告

objective-c - 什么是自动释放池?

ios - 为什么这样使用dispatch_block_t不安全?