Как правильно использовать завершение 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)
}
}