您不能使用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