0

尝试在线程中设置文本时,因“EXC_BAD_ACCESS 在此处崩溃”而崩溃。

???

谢谢

#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];
}
4

2 回答 2

4

对 UI 的更改只能从 UI 线程完成。这个概念在大多数 UI 编程环境/框架中是相似的。

您可以通过调用来修复它:

-(void) Thread_Tcp
{
    [tvCommand performSelectorOnMainThread:@selector(setText:) withObject:@"HELLO" waitUntilDone:YES];
}
于 2012-05-08T01:13:23.650 回答
3

UIKit 不是线程安全的!从后台线程更新 UI 元素可能会破坏库的内部状态并导致崩溃。如果您需要与任何 UI 元素交互,请在主线程中进行。

使用它来更新主线程中的 textView:

[tvCommand performSelectorOnMainThread:@selector(setText:) withObject:@"HELLO" waitUntilDone:NO];
于 2012-05-08T01:14:08.287 回答