SwiftUI @FetchRequest 使应用程序崩溃并出现 returns 错误
SwiftUI @FetchRequest crashes the app and returns error
我正在尝试使用 Xcode 11 在我的 mac 应用程序中使用核心数据和 SwiftUI。
我在创建项目时检查了"Using Core Data"。
我还创建了实体(称为 VisitedCases)并使用编辑器创建 NSManagedObject 子类文件。我还将 Codegen 设置为 Manual/none。
这是生成的 NSManagedObject 文件中的代码:
访问案例+CoreDataProperties.swift
extension VisitedCases {
@nonobjc public class func fetchRequest() -> NSFetchRequest<VisitedCases> {
return NSFetchRequest<VisitedCases>(entityName: "VisitedCases")
}
@NSManaged public var caseNumber: String
}
访问案例+CoreDataClass.swift
@objc(VisitedCases)
public class VisitedCases: NSManagedObject {
}
我在 ContentView.swift 中将 @Environment 变量和 @FetchRequest 称为:
struct ContentView: View {
@Environment(\.managedObjectContext) var managedObjectContext
@FetchRequest(entity: VisitedCases.entity(),
sortDescriptors: []
) var orders: FetchedResults<VisitedCases>
//@State vars and the rest of the code
}
但是,当我 运行 时,应用程序一启动就崩溃,并在输出中显示以下错误:
2020-02-23 18:36:16.889306+0330 ImageSelector[17874:149503] [error] error: No NSEntityDescriptions in any model claim the NSManagedObject subclass 'VisitedCases' so +entity is confused. Have you loaded your NSManagedObjectModel yet ?
CoreData: error: No NSEntityDescriptions in any model claim the NSManagedObject subclass 'VisitedCases' so +entity is confused. Have you loaded your NSManagedObjectModel yet ?
2020-02-23 18:36:16.889389+0330 ImageSelector[17874:149503] [error] error: +[VisitedCases entity] Failed to find a unique match for an NSEntityDescription to a managed object subclass
CoreData: error: +[VisitedCases entity] Failed to find a unique match for an NSEntityDescription to a managed object subclass
2020-02-23 18:36:16.921131+0330 ImageSelector[17874:149503] executeFetchRequest:error: A fetch request must have an entity.
我还有一个函数可以将字符串保存到存储器中,而且似乎工作正常:
func addCaseNumber (caseNo: String) {
guard caseNo != "" else {return}
let newCaseNumber = VisitedCases(context: self.managedObjectContext)
newCaseNumber.caseNumber = caseNo
do {
try self.managedObjectContext.save()
print("Case number saved.")
} catch {
print(error.localizedDescription)
}
}
我的代码有什么问题,我应该如何修复它?
尝试像这样在 ContentView
中分配 managedObjectContext
let managedObjectContext: NSManagedObjectContext = ((UIApplication.shared.delegate as? AppDelegate)?.persistentContainer.viewContext)!
如果这有效,则意味着您的 @Environment var
不工作。
要找出中断发生的位置,请从具有
的 SceneDelegate
开始
let contentView = ContentView().environment(\.managedObjectContext, context)
然后查看与Environment
的连接在哪里中断
在你所有的视图中加入类似这样的东西,看看哪个没有得到 Environment
变量。
@Environment(\.managedObjectContext) var managedObjectContext
var body: some View {
print("MOC = ")
print(managedObjectContext.name ?? "broken")
return Text("Hello World!")
}
当你发现中断时用
重新建立它
YourBrokenView().environment(\.managedObjectContext, managedObjectContext)
在@enviromentVAr中,有时需要自己设置环境。
let managedObjectContext: NSManagedObjectContext = ((UIApplication.shared.delegate as? AppDelegate)?.persistentContainer.viewContext)!
ContentView().environment(\.managedObjectContext, managedObjectContext)
然后 managedObjectContext 就可以工作了。
@Environment(\.managedObjectContext) var managedObjectContext
这对我有用我正在为我的 CoreData 实体使用 NSManagedObject 子类(代码生成定义中的Manual/None)因为我正在做一些解包。我必须删除 class 并使用编辑器再次生成,然后一切都再次工作
我正在尝试使用 Xcode 11 在我的 mac 应用程序中使用核心数据和 SwiftUI。 我在创建项目时检查了"Using Core Data"。 我还创建了实体(称为 VisitedCases)并使用编辑器创建 NSManagedObject 子类文件。我还将 Codegen 设置为 Manual/none。 这是生成的 NSManagedObject 文件中的代码:
访问案例+CoreDataProperties.swift
extension VisitedCases {
@nonobjc public class func fetchRequest() -> NSFetchRequest<VisitedCases> {
return NSFetchRequest<VisitedCases>(entityName: "VisitedCases")
}
@NSManaged public var caseNumber: String
}
访问案例+CoreDataClass.swift
@objc(VisitedCases)
public class VisitedCases: NSManagedObject {
}
我在 ContentView.swift 中将 @Environment 变量和 @FetchRequest 称为:
struct ContentView: View {
@Environment(\.managedObjectContext) var managedObjectContext
@FetchRequest(entity: VisitedCases.entity(),
sortDescriptors: []
) var orders: FetchedResults<VisitedCases>
//@State vars and the rest of the code
}
但是,当我 运行 时,应用程序一启动就崩溃,并在输出中显示以下错误:
2020-02-23 18:36:16.889306+0330 ImageSelector[17874:149503] [error] error: No NSEntityDescriptions in any model claim the NSManagedObject subclass 'VisitedCases' so +entity is confused. Have you loaded your NSManagedObjectModel yet ?
CoreData: error: No NSEntityDescriptions in any model claim the NSManagedObject subclass 'VisitedCases' so +entity is confused. Have you loaded your NSManagedObjectModel yet ?
2020-02-23 18:36:16.889389+0330 ImageSelector[17874:149503] [error] error: +[VisitedCases entity] Failed to find a unique match for an NSEntityDescription to a managed object subclass
CoreData: error: +[VisitedCases entity] Failed to find a unique match for an NSEntityDescription to a managed object subclass
2020-02-23 18:36:16.921131+0330 ImageSelector[17874:149503] executeFetchRequest:error: A fetch request must have an entity.
我还有一个函数可以将字符串保存到存储器中,而且似乎工作正常:
func addCaseNumber (caseNo: String) {
guard caseNo != "" else {return}
let newCaseNumber = VisitedCases(context: self.managedObjectContext)
newCaseNumber.caseNumber = caseNo
do {
try self.managedObjectContext.save()
print("Case number saved.")
} catch {
print(error.localizedDescription)
}
}
我的代码有什么问题,我应该如何修复它?
尝试像这样在 ContentView
中分配 managedObjectContext
let managedObjectContext: NSManagedObjectContext = ((UIApplication.shared.delegate as? AppDelegate)?.persistentContainer.viewContext)!
如果这有效,则意味着您的 @Environment var
不工作。
要找出中断发生的位置,请从具有
的SceneDelegate
开始
let contentView = ContentView().environment(\.managedObjectContext, context)
然后查看与Environment
的连接在哪里中断
在你所有的视图中加入类似这样的东西,看看哪个没有得到 Environment
变量。
@Environment(\.managedObjectContext) var managedObjectContext
var body: some View {
print("MOC = ")
print(managedObjectContext.name ?? "broken")
return Text("Hello World!")
}
当你发现中断时用
重新建立它YourBrokenView().environment(\.managedObjectContext, managedObjectContext)
在@enviromentVAr中,有时需要自己设置环境。
let managedObjectContext: NSManagedObjectContext = ((UIApplication.shared.delegate as? AppDelegate)?.persistentContainer.viewContext)!
ContentView().environment(\.managedObjectContext, managedObjectContext)
然后 managedObjectContext 就可以工作了。
@Environment(\.managedObjectContext) var managedObjectContext
这对我有用我正在为我的 CoreData 实体使用 NSManagedObject 子类(代码生成定义中的Manual/None)因为我正在做一些解包。我必须删除 class 并使用编辑器再次生成,然后一切都再次工作