您不能使用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];
}
雅,我已经实施了第二种方法,但类别的想法更好 – 2011-05-25 07:14:24