点击段时停止 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 视图中。
您可能还想考虑加载数据时的用户体验。我可能会这样做:
- 当段发生变化时,隐藏 table 视图并取消隐藏以 table 视图的位置
为中心的 UIActivityIndicatorView
- 开始从网络加载到临时数组
- 加载完成后分配给
self.news
- 重新加载 table 数据
- 隐藏 UIActivityView 并取消隐藏 table视图
我下面有一个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 视图中。
您可能还想考虑加载数据时的用户体验。我可能会这样做:
- 当段发生变化时,隐藏 table 视图并取消隐藏以 table 视图的位置 为中心的 UIActivityIndicatorView
- 开始从网络加载到临时数组
- 加载完成后分配给
self.news
- 重新加载 table 数据
- 隐藏 UIActivityView 并取消隐藏 table视图