我如何修复:
线程1:"NSFetchRequest找不到实体名称‘提醒’的NSEntityDescription
我在另一篇文章中读到,如果我改变配置顺序,它就会起作用.但通过这样做,我只是更改了导致应用程序崩溃的模型.
import SwiftUI
import SwiftData
import CoreData
#if os(iOS) || os(macOS) || os(watchOS)
import WidgetKit
#endif
@main
struct Main: App {
@Environment(\.scenePhase) private var scenePhase
@StateObject var statsViewModel = StatsViewModel()
@StateObject var badgeViewModel = BadgeViewModel()
@StateObject var localNotificationManager = LocalNotificationManager()
@AppStorage("notifications") var notificationsSet: Bool = false
@Environment(\.modelContext) private var modelContext
let container: ModelContainer
init(){
let fileContainer = URL.storeURL(for: "group.Water-Alert-App", databaseName: "CoreData")
let defaultDirectoryURL = NSPersistentContainer.defaultDirectoryURL()
let localSchema = Schema([Reminder.self])
let cloudSchema = Schema([Goal.self, WaterData.self, Container.self])
let localConfiguration = ModelConfiguration("Local", schema: localSchema, url: defaultDirectoryURL.appendingPathComponent("Local.sqlite"))
let cloudConfiguration = ModelConfiguration("Cloud", schema: cloudSchema, url: fileContainer, cloudKitDatabase: .private("iCloud.Water-Alert-App-Offical"))
container = try! ModelContainer(for: Reminder.self, Goal.self, WaterData.self, Container.self, configurations: cloudConfiguration, localConfiguration)
}
var body: some Scene {
WindowGroup {
ContentView()
.environmentObject(statsViewModel)
.environmentObject(badgeViewModel)
.environmentObject(localNotificationManager)
.task {
if !notificationsSet {
do{
try await localNotificationManager.reqeustAuthorization()
await localNotificationManager.setUpNotificationsAtStart()
} catch{
}
}
notificationsSet = true
}
}
.modelContainer(container)
.onChange(of: scenePhase) { _, phase in
if phase == .active{
Task{
#if os(iOS) || os(macOS) || os(watchOS)
WidgetCenter.shared.reloadAllTimelines()
#endif
await localNotificationManager.getCurrentSettings()
await localNotificationManager.getPendingRequest()
}
} else if phase == .background{
do {
#if os(iOS) || os(macOS) || os(watchOS)
WidgetCenter.shared.reloadAllTimelines()
#endif
try modelContext.save()
} catch {
print(error)
}
}
}
这是导致应用程序崩溃的代码,只有当我通过视图中的查询访问提醒模型时,应用程序才会崩溃.