如何在执行后台提取时正确使用completionHandler?

时间:2016-07-08 03:14:55

标签: swift uilocalnotification appdelegate background-fetch

我在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());
    }

0 个答案:

没有答案