仅当应用程序处于活动状态时,如何在performFetchWithCompletionHandler中执行代码?

时间:2017-08-03 14:50:57

标签: ios swift background fetch appdelegate

我想在某段时间内执行某些操作。但是,当app处于后台或非活动状态时,这不应该出现。 我已经实现了如下

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {


UIApplication.shared.setMinimumBackgroundFetchInterval(UIApplicationBackgroundFetchIntervalMinimum)
   return true
}

在performFetchWithCompletionHandler

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

    print("Background fetch called")



        // foreground

    if (application.applicationState == .active)
    {

        //lines of code to perform



}
}

但是当我尝试在模拟器中模拟背景提取时,它显示以下消息

警告:应用程序委托收到对-application的调用:performFetchWithCompletionHandler:但是从未调用完成处理程序。

我尝试删除应用程序状态条件并且它工作正常。但是我想仅在应用程序处于活动状态且不处于后台或非活动状态时才执行这些行。我如何实现此目的?

1 个答案:

答案 0 :(得分:1)

您忘记将完成处理程序添加到该函数中。它应该在数据提取完成时调用。

如果您要显示新数据,请将其插入您的代码:

str

...如果您没有数据,请执行以下操作:

completionHandler(.newData)

...如果提取失败,则为此:

completionHandler(.noData)