2016-08-04 3 views
0

Это мой код. Я хочу показать индикатор, когда я нажимаю кнопку во время передачи данных и добавления данных в базу данных. Как я могу это исправить?Индикатор загрузки работает неправильно

@IBAction func addWishList(sender: AnyObject) { 
    self.loading.startAnimating() 
     addMovie(showMovie!) // Database add method. 
} 

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), {() -> Void in 
     let controller : WishListViewController = segue.destinationViewController as! WishListViewController 

     if segue.identifier == "segue" { 
      controller.user = self.tmpUser // data from Facebook to pass another controller 
      dispatch_async(dispatch_get_main_queue(), {() -> Void in 
       self.loading.stopAnimating() 
      }) 
     } 
    }) 
} 

ответ

0

Ваш addMovie блокирует основную очередь. Вам нужно дать некоторую задержку, чтобы добавить его в следующий цикл цикла. Пользуйтесь использованием:

@IBAction func addWishList(sender: AnyObject) { 
    self.loading.startAnimating() 
    //This will add to next main run loop. 
    let dispatchTime: dispatch_time_t = dispatch_time(DISPATCH_TIME_NOW, Int64(0.0 * Double(NSEC_PER_SEC))) 
    dispatch_after(dispatchTime, dispatch_get_main_queue(), { 
      addMovie(showMovie!) // Database add method. 

    }) 
} 
0

сделать как следующий ..

@IBAction func addWishList(sender: AnyObject) { 

     self.loading.startAnimating() 
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), {() -> Void in 

      addMovie(showMovie!) // Database add method. 

    dispatch_async(dispatch_get_main_queue(), {() -> Void in 
    self.loading.stopAnimating() 

    }) 
    }) 

} 
Смежные вопросы