![](/img/trans.png)
[英]No NSEntityDescriptions in any model claim the NSManagedObject subclass
[英]iOS 14 Beta - Core Data in Swift UI Error: No NSEntityDescriptions in any model claim the NSManagedObject subclass
我正在使用新的 SwiftUI App 協議並通過 @Environment 傳遞我的核心數據 NSPersistentContainer:
final class PersistentStore: ObservableObject {
static let shared = PersistentStore()
let persistentContainer: NSPersistentContainer
private init() {
self.persistentContainer = {
let container = NSPersistentContainer(name: "SillyModel")
container.loadPersistentStores(completionHandler: { (storeDescription, error) in
if let error = error as NSError? {
fatalError("Unresolved error \(error), \(error.userInfo)")
}
})
return container
}()
}
func saveContext() {
let context = persistentContainer.viewContext
if context.hasChanges {
do {
try context.save()
} catch {
let nserror = error as NSError
fatalError("Unresolved error \(nserror), \(nserror.userInfo)")
}
}
}
}
@main
struct SillyApp: App {
@Environment(\.scenePhase) private var scenePhase
var body: some Scene {
WindowGroup {
NavigationView {
ProjectGridView()
}
.environment(\.managedObjectContext, PersistentStore.shared.persistentContainer.viewContext)
}
}
}
然后我在 ProjectGridView 中使用 @Enviroment 從環境中獲取 managedObjectContect,嘗試 @FetchRequest 並顯示一個新的 LazyVGrid:
struct ProjectGridView: View {
@Environment(\.managedObjectContext) var managedObjectContext
@FetchRequest(
entity: Project.entity(),
sortDescriptors: [
NSSortDescriptor(keyPath: \Project.title, ascending: true)
]
) var projects: FetchedResults<Project>
let columns = [GridItem(.adaptive(minimum: 80.0))]
var body: some View {
return ScrollView {
LazyVGrid(columns: columns, spacing: 20) {
ForEach(projects, id:\.title) { (project: Project) in
Text("\(project.title ?? "")")
}
}
.padding(.horizontal)
}
}
}
我收到此錯誤:
[error] error: No NSEntityDescriptions in any model claim the NSManagedObject subclass 'Project' so +entity is confused. Have you loaded your NSManagedObjectModel yet ?
我嘗試編寫代碼來保存新的 Project(),甚至讓 @FetchRequest 在其他地方工作。 我猜這可能與 LazyVGrid 的“懶惰”部分有關? 有任何想法嗎?
好的,從 Apple Developer 論壇中找到了一個修復程序。 這似乎只是一個測試版錯誤:
要修復,請為您的 model class 創建一個擴展:
import Foundation
import CoreData
extension Project {
class func swiftUIFetchRequest() -> NSFetchRequest<Project> {
let request = NSFetchRequest<Project>(entityName: "Project")
request.sortDescriptors = [NSSortDescriptor(keyPath: \Project.title, ascending: true)] /* You can add custom sort descriptors here */
return request
}
}
然后像這樣調用@FetchRequest:
@FetchRequest(fetchRequest: Project.swiftUIFetchRequest()) var projects: FetchedResults<Project>
感謝 Apple Developer 論壇中發現這一點的人。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.