我正在使用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?
@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()发布于 2020-12-02 02:26:46
尝试在init中完成此操作
@main
struct newFitnessAppApp: App {
init() {
registerBackgroundTasks()
}
// ... other code
}或者在委托回调https://stackoverflow.com/a/62538373/12299030中使用AppDelegate适配器执行此操作
https://stackoverflow.com/questions/65096278
复制相似问题