在线程中尝试setText时,崩溃时出现“与EXC_BAD_ACCESS崩溃”。
???
THX
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController<UITextViewDelegate>
{
UITextView *tvCommand;
}
@end
---------
-(void) Thread_Tcp
{
[tvCommand setText:@"HELLO"];//crashes here with EXC_BAD_ACCESS
}
- (void)viewDidLoad
{
NSThread *hThread = [NSThread alloc] initWithTarget:self selector:@selector(Thread_Tcp) object:nil];
[hThread start];
}
答案 0 :(得分:4)
UI的更改应仅从UI线程完成。这个概念在大多数UI编程环境/框架中都是类似的。
你可以通过调用:
来修复它-(void) Thread_Tcp
{
[tvCommand performSelectorOnMainThread:@selector(setText:) withObject:@"HELLO" waitUntilDone:YES];
}
答案 1 :(得分:3)
UIKit不是线程安全的!从后台线程更新UI元素可能会破坏库的内部状态并导致崩溃。如果您需要与任何UI元素进行交互,请在主线程中进行。
使用它来更新主线程中的textView:
[tvCommand performSelectorOnMainThread:@selector(setText:) withObject:@"HELLO" waitUntilDone:NO];