我需要在文本视图中显示日志输出然后在我的应用程序中显示。我尝试在我的序列中使用 performSelector ,但它没有像我想象的那样工作。有人可以告诉我该怎么做吗?
例如,当我单击一个按钮时,我会在下面执行大量操作,然后我想在textview中显示日志,而不是在整个操作完成之后。
另外,我不能在同一序列中多次调用 performSelector 吗?
按钮点击内的顺序如下:
- (IBAction)Write:(id)sender {
//do some action here
DisplayString = @"Seq1 pass"
[self performSelector:@selector(updateviewText) withObject:nil afterDelay:0];
//do some more action
DisplayString = @"Seq2 pass"
[self performSelector:@selector(updateviewText) withObject:nil afterDelay:0];
....
}
这是updateviewText部分:
-(void)updateviewText {
dispatch_queue_t queueNew = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0);
dispatch_async(queueNew,^ {
dispatch_async(dispatch_get_main_queue(),^{
[self.txtViewUseCaseLOG setText:[NSString stringWithFormat:@"%@\n%@",
self.txtViewUseCaseLOG.text,DisplayString ]];
});
});
}
DisplayString 是一个全局变量。
这段代码没有将text文件设置为textview然后......但正如我之前所说的那样,那时我需要那些消息......
答案 0 :(得分:0)
您无法异步更新UI。如果您正在异步执行任务并想要更新UI,则必须使用dispatch_sync
。
当你做异步打开另一个异步任务时,你为什么要这样做?
接下来的事情是,如果你在这两种方法中只使用DisplayString
,最好将NSString参数添加到updateViewText
,这样你就不需要全局变量了。