• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - 在启动前在第一个选项卡 View Controller 上加载数据

[复制链接]
菜鸟教程小白 发表于 2022-12-11 16:56:52 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我正在使用 Swift 2.2 开发一个应用程序。

我从初始模板创建了一个选项卡式应用程序。然后我在我的 FirstViewController 类中添加了一些代码,以便下载、解析和显示一些 JSON 格式的数据。

这是我的 FirstViewController.swift 文件的内容:

import UIKit

class FirstViewController: UIViewController {

    @IBOutlet weak var siteNameLabel: UILabel!


    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        var siteName = ""
        let requestURL: NSURL = NSURL(string: "http://wheretogo.com.mx/backends/service.php")!
        let urlRequest: NSMutableURLRequest = NSMutableURLRequest(URL: requestURL)
        let session = NSURLSession.sharedSession()
        let task = session.dataTaskWithRequest(urlRequest) {
            (data, response, error) -> Void in

            let httpResponse = response as! NSHTTPURLResponse
            let statusCode = httpResponse.statusCode

            if (statusCode == 200) {
                //print("Everyone is fine, file downloaded successfully.")

                do{

                    let json = try NSJSONSerialization.JSONObjectWithData(data!, options:.AllowFragments)

                    if let appInfo = json["appInfo"] as? [[String: AnyObject]] {
                        siteName = appInfo[0]["siteName"] as! String
                        self.siteNameLabel.text = siteName

                    }

                }catch {
                    print("Error with Json: \(error)")
                } 
            }
        }

        task.resume()
    }

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

获取和解析数据确实有效。问题是只有当我选择第二个选项卡然后返回第一个选项卡时才会显示数据。

当它加载标签时,它具有默认文本,当我转到另一个选项卡并返回第一个选项卡时,它会发生变化,然后是 self.siteNameLabel.text = siteName。

我认为init可以解决它,但我不知道如何,或者可能是延迟?

或者我如何在我的第一个 View Controller 加载之前处理下载数据。

提前致谢。



Best Answer-推荐答案


这可能与您用于更新 UI 的线程有关。请注意,dataTaskWithRequest 使用的完成 block 是在后台线程上执行的。

由于 Apple 只允许在主线程上进行 UI 更新,因此您可以使用像这样的调度 block 来解决这个问题(如 here 所述):

dispatch_async(dispatch_get_main_queue(), {
    self.siteNameLabel.text = siteName
})

另外,请注意,如果您希望每次显示 FirstViewController 时更新 UI 所依赖的数据,则应将代码放在 viewDidAppear 而不是 viewDidLoad.

希望这会有所帮助!

关于ios - 在启动前在第一个选项卡 View Controller 上加载数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38289579/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap