Xcode未搜索到Core Data实体导致预览报错
Xcode未搜索到Core Data实体导致预览报错

Xcode未搜索到Core Data实体导致预览报错

在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实体的报错。

如果您认为这篇文章给您带来了帮助,您可以在此通过支付宝或者微信打赏网站开放者。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注