var weibos: [
Int] =[];
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
print("条数\(weibos?.count)");
return weibos?.count ?? 0
}
func loadData(){
//WeiboModel.loadData(0, max_id: 0) { (list, error) -> () in
self.weibos = [1];
print(self.weibos);
print(self.weibos?.count);
self.tableView.reloadData();
//}
}
以上 uitableview 的代理方法, app 启动的时候,能输出 “条数 1 ”
但是 如果将 WeiboModel.loadData 注释去掉,
函数里的代码还是能执行 print(self.weibos); 等于 1
但是 func tableView(tableView: UITableView, numberOfRowsInSection section: Int) 这个代理方法就执行不了,导致页面表格出不来。。。
甚至我延迟 10 秒执行 print(self.weibos?.count);self.tableView.reloadData();,表格还是出不来。数组里 weibos 是有值的。。
为什么加了这个函数 WeiboModel.loadData 之后 self.tableView.reloadData()就不起作用了。里面只是封装了一个 AFNetworking 的请求而已。。。
1
jackisnotspirate 2015-11-18 16:44:19 +08:00
看先你的 weiboModel
|
2
a379395979 OP @jackisnotspirate
// WeiboModel 的一个 func class func loadData(since_id: Int, max_id: Int, finished: (list: [WeiboModel]?, error: NSError?)-> ()) { NetworkTool.shareNetworkTool.loadWeibo(since_id, max_id: max_id) { (result, error) -> () in // 判断是否有错误 if error != nil { print("加载微博数据出错:\(error!)") finished(list: nil, error: error) } // 获取返回数据里的微博数据 if let array = result?["statuses"] as? [[String : AnyObject]] { // 创建模型数组 var list : [WeiboModel] = []; for dict in array { // 字典转模型并添加到模型数组中 list.append(WeiboModel(dict: dict)) } finished(list:list,error:nil); } else { // 没有加载到数据 finished(list: nil, error: nil) } } } |
3
tane05 2015-11-18 17:49:24 +08:00 via iPhone
条件反射 delegate 设了没?是主线程没?
|
4
zepto 2015-11-18 19:27:29 +08:00
self.tableView.reloadData() 理论上需要在主线程中进行
|
5
a379395979 OP https://github.com/iScript/swift-project/blob/master/ySeed/HomeViewController.swift
这是代码,哪位大神帮忙看看啊。。 数组里是有值的, reloadData()就是不行。。 注释掉 WeiboModel.loadData(0, max_id: 0) { (list, error) -> () in , reloadData()就可以了。。 数组是同样的值。都写死了。 |
6
sablib 2015-11-22 23:58:31 +08:00
如果是注释掉 WeiboModel.loadData 就好了的话,很有可能是因为你的那个 loadData 的回调不是在主线程执行的。
|