1

我对 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 时,显然它不会更新,因为线程完成所需的时间比事件处理程序的执行要长。什么可能是解决这个问题?

谢谢!

4

1 回答 1

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];
  });
});
于 2013-03-14T16:26:37.297 回答