我在completionHandler
performFetchWithCompletionHandler
内使用AppDelegate
内的completionHandler
时很难缠头。
我的应用程序执行一些后台提取,在获取期间,我想调用位于我的一个viewControllers中的函数
使用completionHandler
的正确方法是什么,我知道这是一个异步任务。
当我想将数据发送到我的数据库时,我设法使它工作,但当我想调用位于其中一个viewControllers中的函数时,我无法使其工作
尝试:调用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")
}
}
}
}
的正确方法是什么?
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)
}
}
P.S:这是成功的尝试,这是我将数据发送到我的数据库的时候:
@Override
public void onViewAttachedToWindow(ViewHolder holder){
super.onViewAttachedToWindow(holder);
if(!holder.tv_1.getText().toString().contentEquals("#EMPTYVIEW"))
holder.root.setVisibility(View.VISIBLE);
Log.i("ATTACHED_VISIBILITY",holder.tv_1.getText().toString()+"\t"+holder.root.getVisibility());
}