You cannot use performSelectorOnMainThread:withObject:waitUntilDone:
with an argument that isn’t an Objective-C object, and you cannot use NSNumber
because there’s no automatic unboxing from objects to primitive types.
One solution is to implement a similar method that accepts a button as an argument and call that method instead.
For example, in that same class:
- (void)enableButton:(NSButton *)button {
[button setEnabled:YES];
}
and
-(void)backgroundThread{
[self performSelectorOnMainThread:@selector(enableButton:)
withObject:myButton
waitUntilDone:YES];
}
Another solution is to implement a category on NSButton
with an alternative method (e.g. -setEnabledWithNumber:
), and use that method instead:
@interface NSButton (MyButtonCategory)
- (void)setEnabledWithNumber:(NSNumber *)enabled;
@end
@implementation NSButton (MyButtonCategory)
- (void)setEnabledWithNumber:(NSNumber *)enabled {
[self setEnabled:[enabled boolValue]];
}
@end
and
-(void)backgroundThread{
[myButton performSelectorOnMainThread:@selector(setEnabledWithNumber:)
withObject:[NSNumber numberWithBool:YES]
waitUntilDone:YES];
}