swift加了闭包之后UITableView 单元格刷新不出来

紫川_444868
  • 181
var weibos :[Int]?;
...
self.loadData();
...

func loadData(){
    //WeiboModel.loadData(0, max_id: 0) { (list, error) -> () in
        
        self.weibos = [];
        for(var i=0;i<10;i++){
            self.weibos?.append(i);
        }
        print("不管有没有注释WeiboModel.loadData 都能执行到这里");
    //}
}

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    print("微博条数\(weibos?.count)");
    return weibos?.count ?? 0
}
 func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = UITableViewCell();
    cell.textLabel?.text = String(weibos?[indexPath.row]);
    return cell;
}

以上是一个ios uitableview的代码,
运行app后能在界面中显示出10行的单元格。
但是,如果我把WeiboModel.loadData这个方法不注释的话。
下面向数组添加元素照样能执行到,并且数组里也有值,但tableVIew的几个代理方法全部失效了。
不管tableView.reloadData(),还是改变数组的值,单元格都不显示。

求帮助,调试一整天了。。。。。。。。。。

代码:https://github.com/iScript/swift-project/blob/master/ySeed/HomeViewController.swift

回复
阅读 3.4k
2 个回答
未解
  • 2.7k
✓ 已被采纳

WeiboModel.loadData 是异步的吗?如果是异步的就可以解释了, 你在 for 循环 append 元素完成之后,加一句

self.tableView.reloadData()

原因可能是 table 的 reload 在加元素之前就执行了, 等到加完元素,table 不会自动的再去 reload 一次, 需要手动的调用 reloadData 方法。

clipboard.png

底下红框里的 tableView 是个局部变量, 它覆盖上面那个私有的实例变量了, 所以 reload 的时候的 tableView 不是你加到 self.view 上的 tableView.

。。。。。。。。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏