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

How to execute code inside performFetchWithCompletionHandler only when application is in active state?

我想在 time.But 的某个时间间隔内执行某些操作,这在应用程序处于后台或非活动状态时不应发生。 我已经实现如下

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: 的调用,但从未调用完成处理程序。

我尝试删除应用程序状态条件并且它正在工作fine.But我只想在应用程序处于活动状态而不是在后台或非活动状态时执行这些行state.How我可以实现吗?

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

如果您有新数据要显示,请将此插入到您的代码中:

completionHandler(.newData)

...如果您没有数据:

completionHandler(.noData)

...如果获取失败,则为:

completionHandler(.failed)