点击段时停止 cellForRowAtIndexPath

Stop cellForRowAtIndexPath when tapping segments

我下面有一个segmentedControl和一个tableView

SegmentedControl 有两个段:'News' 和 'Events'.

新闻和事件在 func getJson(type: Int) 中下载到 var news = [News]()

对于新闻 - news.type = 1,对于事件 news.type = 2

我的getJson方法是:

func getJson(type: Int) {
    self.news = [] // empty news array
    if jsonData["type"] == type {
        // save needed news to array
        self.news.append(News(id: jid, title: jtitle, subtitle: jsubtitle, urlstring: jurlstring, image: jimage!))
    }
}

所以问题是当我滚动并迅速点击第二个部分时,应用程序崩溃了:

因为 getJson 中的 self.news = []self.news.append 之间,这里是 cellForRowAtIndexPath

我的问题是如何在点击段时停止 cellForRowAtIndexPath?谢谢。

如果您从网络加载数据的代码与驱动您的 table 视图的数组发生冲突,那么您将遇到问题...而您确实遇到了问题。

典型的方法是在网络加载代码中将数据加载到一个临时数组中,然后在加载完成后将其分配给实际数组(在您的情况下为self.news),然后调用reloadData 在您的 table 视图中。

您可能还想考虑加载数据时的用户体验。我可能会这样做:

  1. 当段发生变化时,隐藏 table 视图并取消隐藏以 table 视图的位置
  2. 为中心的 UIActivityIndi​​catorView
  3. 开始从网络加载到临时数组
  4. 加载完成后分配给self.news
  5. 重新加载 table 数据
  6. 隐藏 UIActivityView 并取消隐藏 table视图