Как правильно использовать завершение Handler при выполнении фоновой выборки?

Я с трудом оборачиваюсь головой, используя completionHandler внутри performFetchWithCompletionHandler в AppDelegate,

Мое приложение выполняет некоторую фоновую выборку, и во время выборки я хотел бы вызвать функцию, которая находится в одном из моих viewControllers

Как правильно использовать completionHandlerЯ знаю, что это асинхронная задача.

Мне удалось заставить его работать, когда я хотел отправить данные в мою базу данных, но я не могу заставить его работать, когда я хочу вызвать функцию, расположенную в одном из viewControllers

Попытка: как правильно позвонить completionHandler?

func application(application: UIApplication, performFetchWithCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) {

 if let tabBarController = window?.rootViewController as? UITabBarController,
     viewControllers = tabBarController.viewControllers as [UIViewController]! {

     for viewController in viewControllers {
       if let myViewController = viewController as? MyViewController  {

         myViewController.myFunction()
         print("background fetch done")
         completionHandler(.NewData)
         print("background fetch done")
       }
     }
   }
}

PS: Вот попытка, которая была успешной, это когда я отправлял данные в свою базу данных:

func application(application: UIApplication, performFetchWithCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) {

 let name = UIDevice.currentDevice().name
 let val = "\(name): \(timeFormatter.stringFromDate(NSDate()))"
 db.childByAutoId().setValue(val) { _ in
    print("Background Fetch Completed")
    completionHandler(.NewData)
 }
}

0 ответов

Другие вопросы по тегам