我正在运行另一个处理线程,我想将结果记录到 NSTextView ,当发布新行时,它会更新视图并将滚动条定位到底部。 有什么建议吗?
- (void)runProc
{
do {
[NSThread sleepForTimeInterval:0.1];
[self reportInfo:@"tick"];
} while (stop == NO);
}
- (void)report:(NSString*)string;
{
[[consoleView textStorage] beginEditing];
[[[consoleView textStorage] mutableString] appendString:string];
[[[consoleView textStorage] mutableString] appendString:@"\n"];
[[consoleView textStorage] endEditing];
NSRange range;
range = NSMakeRange ([[consoleView string] length], 0);
[consoleView scrollRangeToVisible: range];
}
它有大约50个条目然后锁定整个事情。
答案 0 :(得分:5)
大部分AppKit都不是线程安全的,您无法从辅助线程更新NSTextView
。所有UI更新必须在主线程上完成。
您需要像下面这样调用您的报告方法:
[self performSelectorOnMainThread:@selector(report:) withObject:@"tick" waitUntilDone:YES];