ios - swift加了闭包之后UITableView 单元格刷新不出来
黄舟
黄舟 2017-04-17 16:44:32
[iOS讨论组]
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

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全部回复(2)
高洛峰

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

self.tableView.reloadData()

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

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

高洛峰

。。。。。。。。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号