ios - UITableViewController用Alamofire加载网络数据
怪我咯
怪我咯 2017-04-17 17:23:57
[iOS讨论组]

场景:从上一个tableView点击传入uid,然后在viewDidLoad里面做数据查询,最后展示到tableView中。

问题:用Alamofire做GET请求得到结果,但在Alamofire打印结果条数为0,在Alamofire内打印有结果条数。具体请看代码

class SealViewController: UITableViewController {
    
    var userId: String!
    var seals: [SealModel] = []
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        print("uid->", userId)
        //加在API JSON数据
        Alamofire.request(.GET, SERVICEAPIDOMAIN + "/Mobile/MobileHandler.ashx?method=toAudit&uid=" + userId).responseJSON {
            response in
            if let apiData = response.result.value {
                let json = JSON(apiData)
                for var i = 0; i < json["items"].count; i++ {
                    let line = json["items"][i]
                    self.seals.append(SealModel(id: line["ID"].stringValue, title: line["TitleStr"].stringValue, content: line["ContentStr"].stringValue, dateTime: line["TimeStr"].stringValue, type: line["Type"].stringValue))
                }
            }
            print("Alamofire-sealsCount->", self.seals.count)
        }
        
        tableView.reloadData()
        print("sealsCount->", self.seals.count)

    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

}

输出结果

uid-> 69
sealsCount-> 0
Alamofire-sealsCount-> 12
怪我咯
怪我咯

走同样的路,发现不同的人生

全部回复(3)
怪我咯

viewDidLoad 是 View 加载完成之后执行的函数,网络请求是异步行为,你在请求完成之后才能获取得数据,但此时 viewDiDLoad 已经执行完毕了,需要展示到 tableView ,可以在获取网络请求的响应之后再 reloadData

伊谢尔伦

网络请求是异步的,可以在print("Alamofire-sealsCount->", self.seals.count)这个位置调用reloadData

PHP中文网

Alamofire进行请求时是异步的,也就是说他在执行

 Alamofire.request(.GET, SERVICEAPIDOMAIN + "/Mobile/MobileHandler.ashx?method=toAudit&uid=" + userId).responseJSON {
            response in
            if let apiData = response.result.value {
                let json = JSON(apiData)
                for var i = 0; i < json["items"].count; i++ {
                    let line = json["items"][i]
                    self.seals.append(SealModel(id: line["ID"].stringValue, title: line["TitleStr"].stringValue, content: line["ContentStr"].stringValue, dateTime: line["TimeStr"].stringValue, type: line["Type"].stringValue))
                }
            }
            print("Alamofire-sealsCount->", self.seals.count)
        }

的时候,不等请求的结束,直接执行之后的代码了。

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

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