我的功能是将http请求和结果保存到2个数组
然后我调用tableViewObejct.reloadData()
将结果显示到tableView
。但如果我在第一次功能后做第二次 - 没有任何反应。我要将我的函数调用到viewDidLoad
,然后我有一个按钮,我正在做reloadData()
,之后我才能在tableView
中看到我的数据。
功能:
func refreshData(){
self.myData.removeAll(keepCapacity: true)
self.ids.removeAll(keepCapacity: true)
httpGet("https://money.yandex.ru/api/categories-list") { result in
let json=JSON(data: result)
println(json[0]["subs"].count)
for var i=0; i<json.count; ++i {
self.myData.append(json[i]["title"].stringValue)
self.ids.append("")
for var g=0; g<json[i]["subs"].count;++g {
self.myData.append(" "+json[i]["subs"][g]["title"].stringValue)
self.ids.append(json[i]["subs"][g]["id"].stringValue)
}
}
println(self.myData.count)
println(self.ids.count)
}
}
myData
是全局公共字符串数组,ids
- 也是
tableView
的函数:
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{
return myData.count
}
func tableView(tableView: UITableView, cellForRowAtIndexPath
indexPath: NSIndexPath) -> UITableViewCell
{
let cell:UITableViewCell=UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: "mycell")
cell.textLabel!.text = myData[indexPath.row]
return cell
}
所以我需要同时调用refreshData-function并在tableView
中查看结果,只需viewDidLoad
或单击按钮即可。为什么我必须将这些行为分开以查看tableView
中的数组数据?
答案 0 :(得分:1)
尝试从服务器获取数据时以这种方式重新加载tableView:
dispatch_async(dispatch_get_main_queue()) {
self.tableView.reloadData()
}
你的代码就像这样:
func refreshData(){
self.myData.removeAll(keepCapacity: true)
self.ids.removeAll(keepCapacity: true)
httpGet("https://money.yandex.ru/api/categories-list") { result in
let json=JSON(data: result)
println(json[0]["subs"].count)
for var i=0; i<json.count; ++i {
self.myData.append(json[i]["title"].stringValue)
self.ids.append("")
for var g=0; g<json[i]["subs"].count;++g {
self.myData.append(" "+json[i]["subs"][g]["title"].stringValue)
self.ids.append(json[i]["subs"][g]["id"].stringValue)
}
}
println(self.myData.count)
println(self.ids.count)
dispatch_async(dispatch_get_main_queue()) {
self.tableView.reloadData()
}
}
}
答案 1 :(得分:0)
有点难以理解这个问题,但我认为正在发生的事情是,当您致电tableView.reloadData()
时,您的GET
请求尚未完成。现在我不知道httpGet
函数的内部实现,但我会假设它是异步的。这意味着您的tableview在请求完成之前正在读取数据。