No puede usar performSelectorOnMainThread:withObject:waitUntilDone:
con un argumento que no es un objeto Objective-C, y no puede usar NSNumber
porque no hay unboxing automático de objetos a tipos primitivos.
Una solución es implementar un método similar que acepte un botón como argumento y llame a ese método en su lugar.
Por ejemplo, en la misma clase:
- (void)enableButton:(NSButton *)button {
[button setEnabled:YES];
}
y
-(void)backgroundThread{
[self performSelectorOnMainThread:@selector(enableButton:)
withObject:myButton
waitUntilDone:YES];
}
Otra solución es poner en práctica una categoría en NSButton
con un método alternativo (por ejemplo -setEnabledWithNumber:
), y el uso ese método en su lugar:
@interface NSButton (MyButtonCategory)
- (void)setEnabledWithNumber:(NSNumber *)enabled;
@end
@implementation NSButton (MyButtonCategory)
- (void)setEnabledWithNumber:(NSNumber *)enabled {
[self setEnabled:[enabled boolValue]];
}
@end
y
-(void)backgroundThread{
[myButton performSelectorOnMainThread:@selector(setEnabledWithNumber:)
withObject:[NSNumber numberWithBool:YES]
waitUntilDone:YES];
}
Ya, ya había implementado un segundo método, pero la idea de categoría es mucho mejor –