swift - 与此上下文的 CoreData SwiftUI 错误不同的 NSManagedObjectModel
问题描述
我之前刚刚为我的应用程序设置了 CoreData 来存储一些数据。我最初让它与不同的实体一起工作,但很快意识到它是错误的模型,并创建了一个新实体并删除了最初的实体。在我的 CoreDataManager 类中更改适当的变量/对象名称后,我一直遇到以下错误(线程问题)
'The fetch request's entity 0x600001040370 'UserSettings' appears to be from a different NSManagedObjectModel than this context's'
terminating with uncaught exception of type NSException
在这里给出一些上下文是我的 coreDataManager 类:
import Foundation
import UIKit
import CoreData
class CoreDataManager {
static let shared: CoreDataManager = {
let appDelegate = AppDelegate.instance!
let instance = CoreDataManager(managedObjectContext: appDelegate.persistanceContainer.viewContext)
return instance
}()
var managedContext: NSManagedObjectContext
init(managedObjectContext: NSManagedObjectContext) {
managedContext = managedObjectContext
}
}
//MARK:- CalorieTracker Insert/Update/Delete
extension CoreDataManager {
func addUserSettingsData(id: UUID, firstName: String, height: Double, weight: Double, gender: String, age: Double, activityLevel: String, bmr: Double, completionHandler: @escaping (_ succeed: Bool, _ error: Error?) -> Void) {
let userSettingsEntity = NSEntityDescription.insertNewObject(forEntityName: "UserSettings", into: managedContext) as? UserSettings
userSettingsEntity?.id = id
userSettingsEntity?.firstName = firstName
userSettingsEntity?.height = height
userSettingsEntity?.weight = weight
userSettingsEntity?.gender = gender
userSettingsEntity?.age = age
userSettingsEntity?.activityLevel = activityLevel
userSettingsEntity?.bmr = bmr
do {
try managedContext.save()
completionHandler(true, nil)
} catch let error {
completionHandler(false, error)
}
}
func fetchCalorieTrackerData(completionHandler: @escaping (_ succeed: Any?, _ error: Error?) -> Void) {
var progresses = [UserSettings]()
let progressRequest: NSFetchRequest<UserSettings> = NSFetchRequest<UserSettings>(entityName: "UserSettings")
do {
progresses = try managedContext.fetch(progressRequest)
completionHandler(progresses, nil)
} catch let error {
completionHandler(nil, error)
}
}
}
我相信问题出在我的 fetch 请求中,因为在我的 viewModel 中创建实体时会执行 print 语句:
import Foundation
class AddViewModel: ObservableObject {
@Published var userSettings = [UserSettings]()
init() {
fetchProgresses()
}
//Creating the data
func addCalorieTrackerDate(id: UUID, firstName: String, height: Double, weight: Double, gender: String, age: Double, activityLevel: String, bmr: Double) {
CoreDataManager.shared.addUserSettingsData(id: id, firstName: firstName, height: height, weight: weight, gender: gender, age: age, activityLevel: activityLevel, bmr: bmr) { (isAdded, error) in
if let error = error {
print(error)
} else {
print("Data has been added!")
print(gender)
}
}
}
//fetching the data
func fetchProgresses() {
CoreDataManager.shared.fetchCalorieTrackerData { (userSettings, error) in
if let error = error {
print(error)
}
if let userSettings = userSettings as? [UserSettings] {
self.userSettings = userSettings
}
}
}
}
我已经被这个错误困住了很长一段时间,任何帮助将不胜感激!
解决方案
我的程序的问题是在我的持久性文件中我使用了错误的名称。我没有使用 CoreData 类,而是使用了项目名称。正确的是:
container = NSPersistentContainer(name: "CalorieTracker")
推荐阅读
- python - 如何将带有批处理的代码注入具有现有代码的批处理中
- microsoft-graph-api - Sharepoint 上的 site-id/itemId 是否会在没有提示的情况下重新生成?
- java - 为什么一旦满足一个条件就停止 WHILE 循环?
- java - 限制只调用一次静态 setter 方法
- python - 超出范围。如何将列表的其余部分添加到累加器?
- javascript - 获取数组中小于的对象,猫鼬
- visual-studio-2019 - Blazor Server 在 Visual Studio 中运行良好,但在部署到 IIS 时失败
- pandas - Pandas 组合 BQ 表中的多个列以生成 FB 转换 api 的有效负载
- javascript - 为什么我的图片链接会在 Visual Studio 代码中自动转换为 base 64?
- c++ - 我应该在我的项目中绘制我对 C++ 标准库文件/对象的使用图吗?