首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在新的iOS 14应用程序中使用BGTaskScheduler应用程序接口。没有AppDelegate的情况下如何注册任务?

在新的iOS 14应用程序中使用BGTaskScheduler应用程序接口。没有AppDelegate的情况下如何注册任务?
EN

Stack Overflow用户
提问于 2020-12-02 02:21:31
回答 1查看 815关注 0票数 3

我正在使用BGTaskScheduler应用程序接口在我的iOS 14应用程序中注册后台任务,该应用程序将新应用程序用作@Main而不是AppDelegate。我认为我们应该使用下面的scenePhase来模仿AppDelegate中didFinishLaunching的前面的功能,但是下面的代码导致了崩溃:*** Assertion failure in -[BGTaskScheduler _unsafe_registerForTaskWithIdentifier:usingQueue:launchHandler:], BGTaskScheduler.m:185 2020-12-01 12:53:40.645091-0500 newFitnessApp[13487:1952133] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'All launch handlers must be registered before application finishes launching'如何实现BGTaskScheduler?

代码语言:javascript
复制
@main
struct newFitnessAppApp: App {
    
    @Environment(\.scenePhase) var scenePhase
    
    //Launch Count (for requesting reviews and to show tutorial)
    //var launchCount = UserDefaults.standard.integer(forKey: TrackerConstants.launchCountKey)
    //var testMode = true
    //@Environment(\.scenePhase) private var phase
    let trackerDataStore = TrackerDataStore(workoutLoader: HealthKitWorkoutLoader())
    
    var body: some Scene {
        WindowGroup {
            AppRootView().environmentObject(trackerDataStore)
        }
        .onChange(of: scenePhase) { newScenePhase in
            switch newScenePhase {
            case .active:
                print("App is active")
                registerBackgroundTasks()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-02 02:26:46

尝试在init中完成此操作

代码语言:javascript
复制
@main
struct newFitnessAppApp: App {

   init() {
      registerBackgroundTasks()
   }

// ... other code
}

或者在委托回调https://stackoverflow.com/a/62538373/12299030中使用AppDelegate适配器执行此操作

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65096278

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档