2015-07-08 2 views
1

У меня возникли трудности с отображением progressHUD при разборе JSON с использованием SwiftyJSON, поскольку приложение кажется сбойным, если я не жду нескольких секунд даже после отображения progressHUD.SwiftyJSON, показывающий progressHUD при завершении

Это не сработает, если я подожду несколько секунд после исчезновения индикатора выполнения, что означает, что я должен делать что-то неправильно с очередью асинхронной отправки. Я не уверен, где обработчик завершения для SwiftyJSON после разбора API.

Причиной аварии является то, что индекс массива выходит за допустимые пределы, так как мои данные еще не загружены должным образом.

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!) 
} 

ответ

0

Вы должны разобрать API в фоновом потоке, в противном случае он будет разбирать на основной поток и блокировать пользовательский интерфейс, пока она не будет закончена.

Я поглядела на странице 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() 
     } 
    } 
} 
Смежные вопросы