在SwiftUI视图预览时,发现Xcode显示如下报错:
CrashReportError: ERdepot crashed due to an uncaught exception
ERdepot crashed due to an uncaught exception `NSInvalidArgumentException`. Reason: +entityForName: nil is not a legal NSPersistentStoreCoordinator for searching for entity name 'Eurofxrefhist'.

经过排查,发现是onAppear加载涉及fetchLatestRates代码导致的报错。
VStack { }
.onAppear {
// 开始加载最新的汇率列表
print("进入onAppear方法")
fetchLatestRates()
}
// 获取最新汇率
private func fetchLatestRates(){
let latestDate = fetchLatestDate() ?? Date()
let request = NSFetchRequest<Eurofxrefhist>(entityName: "Eurofxrefhist")
request.predicate = NSPredicate(format: "date == %@", latestDate as NSDate)
request.sortDescriptors = [NSSortDescriptor(key: "symbol", ascending: true)]
do {
let exchangeRrequestList = try viewContext.fetch(request)
for exchange in exchangeRrequestList {
exchangeRateList[exchange.symbol ?? ""] = exchange.rate
}
print("当前所有汇率列表:\(exchangeRateList)")
} catch {
print("Error fetching latest rates: \(error)")
}
}
但是,这个Core Data代码在其他视图中是正常的。
通过检查发现Preview预览中没有注入managedObjectContext导致的。
#Preview {
ConversionView(isShowConversion: .constant(true))
.environmentObject(AppStorageManager.shared)
}
最后,在Preview预览中注入managedObjectContext后,预览恢复正常。
#Preview {
ConversionView(isShowConversion: .constant(true))
.environmentObject(AppStorageManager.shared)
.environment(\.managedObjectContext, CoreDataPersistenceController.shared.context) // 加载 NSPersistentContainer
.environment(\.backgroundContext, CoreDataPersistenceController.shared.backgroundContext) // 加载 NSPersistentContainer
}

因此,Xcode预览报错问题是因为缺少managedObjectContext导致的,在Preview预览中注入环境变量后,不再显示未搜索到Core Data实体的报错。