Вы не можете использовать performSelectorOnMainThread:withObject:waitUntilDone:
с аргументом, который не является объектом Objective-C, и вы не можете использовать NSNumber
, потому что нет автоматической распаковки объектов от примитивных типов.
Одно из решений состоит в том, чтобыреализовать аналогичный метод, который принимает кнопку в качестве аргумента, и вместо этого вызывать этот метод.
Например, в том же классе:
- (void)enableButton:(NSButton *)button {
[button setEnabled:YES];
}
и
-(void)backgroundThread{
[self performSelectorOnMainThread:@selector(enableButton:)
withObject:myButton
waitUntilDone:YES];
}
Другое решение состоит в том, чтобы реализовать категорию на NSButton
с помощью альтернативного метода (например, -setEnabledWithNumber:
) и использовать вместо этого метод:
@interface NSButton (MyButtonCategory)
- (void)setEnabledWithNumber:(NSNumber *)enabled;
@end
@implementation NSButton (MyButtonCategory)
- (void)setEnabledWithNumber:(NSNumber *)enabled {
[self setEnabled:[enabled boolValue]];
}
@end
и
-(void)backgroundThread{
[myButton performSelectorOnMainThread:@selector(setEnabledWithNumber:)
withObject:[NSNumber numberWithBool:YES]
waitUntilDone:YES];
}