Swift 中出现错误“尾随闭包传递给类型为‘NSManagedObjectContext’的参数,该参数不接受闭包”

Jul*_*n01 2 nsmanagedobjectcontext swift activitykit

我尝试在 Swift 中向我的应用程序添加实时活动。但是,当我尝试运行该应用程序时,出现错误消息“尾随闭包传递给不接受闭包的‘NSManagedObjectContext’类型的参数”。我的应用程序使用 Core Data 来保存我的应用程序的数据。

class HabitManager: ObservableObject {
    private var activity: Activity<HabitsWidgetAttributes>? = nil

    func startHabit(name: String, symbol: String, currentTask: String) {
        let attributes = HabitsWidgetAttributes(name: name, symbol: symbol)
        let state = HabitsWidgetAttributes.ContentState(currentTask: currentTask)
    
        activity = try? Activity<HabitsWidgetAttributes>.request(attributes: attributes, contentState: state)
    }

    func updateActivity(nextTask: String) {
        let state = HabitsWidgetAttributes.ContentState(currentTask: nextTask)
    
        Task { // Line where the error is generated
            await activity?.update(using: state)
        }
    }

    func stopActivity() {
        let state = HabitsWidgetAttributes.ContentState(currentTask: "Finished")
    
        Task { // Line where the error is generated
            await activity?.end(using: state, dismissalPolicy: .immediate)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Emi*_*aez 5

如果您创建一个名为 Task 的 CoreData 实体,那么编译器将尝试使用它而不是 SwiftTask结构。

您可以将 CoreData 实体重命名为其他名称(我推荐),也可以通过在模块前面加上前缀来调用异步任务,在这种情况下,它看起来像这样:

Swift.Task {
  // do stuff
}
Run Code Online (Sandbox Code Playgroud)

由于您必须在任何地方都这样做,因此我强烈建议您重命名您的实体。