我对iOS开发有点新,并且遇到了线程问题。我正在调用一个返回json数据的Web服务,执行此操作的代码按预期工作。对于测试,我希望能够单击按钮,检索数据并使用格式化结果填充textview控件。这是从按钮单击事件处理程序中摘录的代码:
dispatch_queue_t que = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(que, ^{
thisRiverGauge = [[RiverGauge alloc] initWithStationInfo:gauge forHistoryInHours:5 inThisFormat:@"json"];
[txtResults setText:rval];
});
当尝试从线程内更新textview(txtResults)时,我收到运行时错误。当我将更新放在线程之外的textview时,显然它不会更新,因为线程需要比执行事件处理程序更长的时间才能完成。什么可能解决这个问题?
THX!
答案 0 :(得分:4)
您应该在主线程上执行GUI相关任务,在更新textview值的代码周围添加主队列/线程块。
ispatch_queue_t que = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(que, ^{
thisRiverGauge = [[RiverGauge alloc] initWithStationInfo:gauge forHistoryInHours:5 inThisFormat:@"json"];
dispatch_async(dispatch_get_main_queue(), ^{
[txtResults setText:rval];
});
});