【发布时间】:2014-07-30 17:55:51
【问题描述】:
我在导航控制器中嵌入了一个 UITableViewController。我的 rightBarButtonItem 是一个刷新按钮。按下时,该按钮会触发来自服务器的更新。更新是同步的(有时间我会改成异步请求)。我想做的事情在理论上听起来很简单。按下按钮后:
- 将栏按钮项更改为 UIActivityIndicatorView
- 刷新数据
- 重新加载tableView
- 将条形按钮项目改回刷新按钮。
然而,发生的事情是,我将 rightBarButton 设置为具有活动指示器视图的视图,但直到 表视图重新加载后它才会更新,这显然是没有意义的。我的服务器更新例程如下所示:
- View Controller 调用单独的模型对象的“刷新”方法。
- 模型对象同步从服务器获取新数据
- 视图控制器调用 [self.tableView reloadData];
由于它是同步的,我认为它只会一步一步地前进,但这是行不通的。我怎样才能让activityIndicatorView在它应该的时候显示和消失?
【问题讨论】:
-
这是同步请求的预期结果,它会阻塞你的主线程。
-
这正是我感到困惑的原因。事情发生了混乱,但如果它是同步的,它们就不应该发生。
-
也许您的代码有问题。不用等待,当您修改导航栏时,会记录更新,但直到下一个屏幕重绘周期才会应用。但是你阻塞了主线程,而主线程是绘制 UI 的地方。因此,屏幕没有更新,导航栏也没有更新。
标签: ios objective-c uitableview uinavigationcontroller uinavigationitem