【问题标题】:How can I tell Swift to wait until my value is downloaded?我如何告诉 Swift 等到我的值被下载?
【发布时间】:2015-06-10 10:18:18
【问题描述】:

大家早上好,

这是我的问题,我想使用从我的网站 API 获得的 JSON 创建一个 UITableView

问题是他首先执行了tableview的覆盖函数,我的JSON数据还没有下载,我已经测试过,当所有单元格都打印出来时就下载了(没有值,用于测试)。

这是我的功能:

func loadOrders()
{   
    Alamofire.request(.GET, "myurlthatIhidebutworks").responseJSON() { (request, response, data, error) in
         println(request)
         println(response)
         println(data)
         println(error)
         self.allOrders = JSON(data!)
     }
}

我试图以这种方式在viewDidLoadviewWillAppear 中实现它,但它不起作用。

dispatch_async(dispatch_get_main_queue()) {
         self.loadOrders()
}

我很感激一些帮助,谢谢大家:)

【问题讨论】:

  • 没有理由使用 dispatch_async 来调用您的 loadOrders 方法。该方法已经是异步的。只需调用 self.loadOrders() 而不使用 dispatch_async 包装器。

标签: ios json swift uitableview


【解决方案1】:

早上好, 在你的函数 loadOrders() 结束时重新加载你的 tableView:

func loadOrders()
{   
     Alamofire.request(.GET, "myurlthatIhidebutworks").responseJSON() { (request, response, data, error) in
     println(request)
     println(response)
     println(data)
     println(error)
     self.allOrders = JSON(data!)

     // Add this for example
     if data != nil
     {
       self.tableView.reloadData()
     }
}

reloadData() 方法将调用您的所有委托方法。

【讨论】:

  • 不幸的是,我仍然发现致命错误 nil 值 :( 我应该在哪里加载 loadOrders() ?我尝试了 ViewDidLoad() 和 Viewwillappear 但对吗?已经感谢您的回答
  • 我也遇到了初始化问题,多亏了你解决了 :) 祝你有美好的一天!再次感谢
  • 不是我.. 是的 :)
【解决方案2】:

应该像这样工作

func loadOrders()
{   
    Alamofire.request(.GET, "myurlthatIhidebutworks").responseJSON() { (request, response, data, error) in
         dispatch_async(dispatch_get_main_queue()) {
              if(error != nil){
                 println(response)
                 println(data)
                 println(request)
                 self.allOrders = JSON(data!)
              }
              else{
                println(error)
              }
         }
     }
 }

【讨论】:

  • 不幸的是,我仍然发现致命错误 nil 值 :( 我应该在哪里加载 loadOrders() ?我尝试了 ViewDidLoad() 和 Viewwillappear 但对吗?已经感谢您的回答
  • loadOrders 首先应该在 ViewDidLoad 中
  • 它给出 nil 因为错误是 nil,如果您批准,我编辑了我的答案,其他人可以看到它正在工作,快乐编码
猜你喜欢
  • 2013-11-23
  • 1970-01-01
  • 2017-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-13
  • 2012-10-20
相关资源
最近更新 更多