Cha*_*son 10 macos objective-c nsthread
好吧,所以说我有第二个线程正在运行,但它想在主线程上操作一些东西,比如一个UI项目.
-(void)backgroundThread
{
[myButton performSelectorOnMainThread:@selector(setEnabled:) withObject:(BOOL)YES waitUntilDone:YES];
// right here, how could i pass this BOOL to the function
}
Run Code Online (Sandbox Code Playgroud)
我尝试过使用NSNumber's numberWithBOOL,但NSButton不接受它.
小智 16
您不能使用performSelectorOnMainThread:withObject:waitUntilDone:不是Objective-C对象的参数,也不能使用,NSNumber因为没有从对象到原始类型的自动拆箱.
一种解决方案是实现一个类似的方法,它接受一个按钮作为参数并调用该方法.
例如,在同一个类中:
- (void)enableButton:(NSButton *)button {
[button setEnabled:YES];
}
Run Code Online (Sandbox Code Playgroud)
和
-(void)backgroundThread{
[self performSelectorOnMainThread:@selector(enableButton:)
withObject:myButton
waitUntilDone:YES];
}
Run Code Online (Sandbox Code Playgroud)
另一种解决方案是NSButton使用替代方法(例如-setEnabledWithNumber:)实现类别,并使用该方法:
@interface NSButton (MyButtonCategory)
- (void)setEnabledWithNumber:(NSNumber *)enabled;
@end
@implementation NSButton (MyButtonCategory)
- (void)setEnabledWithNumber:(NSNumber *)enabled {
[self setEnabled:[enabled boolValue]];
}
@end
Run Code Online (Sandbox Code Playgroud)
和
-(void)backgroundThread{
[myButton performSelectorOnMainThread:@selector(setEnabledWithNumber:)
withObject:[NSNumber numberWithBool:YES]
waitUntilDone:YES];
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7869 次 |
| 最近记录: |