iOS应用程序中的线程问题

时间:2013-03-14 16:24:53

标签: iphone ios objective-c ipad

我对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!

1 个答案:

答案 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];
  });
});