SwiftyJSON在完成时显示progressHUD

时间:2015-07-08 10:03:18

标签: ios swift mbprogresshud swifty-json

在使用SwiftyJSON解析JSON时,我很难正确显示progressHUD,因为即使在显示progressHUD之后我还没有等待几秒钟,应用程序似乎也会崩溃。

如果我在进度条消失后等待几秒钟就不会崩溃,这意味着我必须对调度异步队列做错事。在解析API之后,我不确定SwiftyJSON的完成处理程序在哪里。

崩溃的原因是数组索引超出范围,因为我的数据尚未正确加载。

override func viewDidLoad() {
    super.viewDidLoad()
    MBProgressHUD.showHUDAddedTo(self.view, animated: true)
    dispatch_async(dispatch_get_main_queue()) {  
    self.parseAPI()
        MBProgressHUD.hideHUDForView(self.view, animated: true)
        self.myTable.reloadData()
    }
 }
func parseAPI() {

    let url = NSURL(string: "https://www.kimonolabs.com/api/e0uyfycg?apikey=7v9FHVAWKgAspMtVwoTNvIwzmWiPyj0F")
    let dataFromNetwork = NSData(contentsOfURL: url!)
    let json = JSON(data: dataFromNetwork!)
}

1 个答案:

答案 0 :(得分:0)

您应该在后台线程中解析API,否则它将在主线程上解析并阻止UI直到它完成。

我看了一下MBProgressHUD页面,看起来像这样:

 override func viewDidLoad() {
    super.viewDidLoad()
    MBProgressHUD.showHUDAddedTo(self.view, animated: true)
    dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_LOW, 0)) {
        self.parseAPI()
        dispatch_async(dispatch_get_main_queue()) {  
            MBProgressHUD.hideHUDForView(self.view, animated: true)
            self.myTable.reloadData()
        }
    }
 }