iOS 14 Beta - Swift UI 中的核心数据错误 : No NSEntityDescriptions in any model claim the NSManagedObject subclass

标签 ios core-data swiftui ios14

我正在使用新的 SwiftUI App 协议(protocol)并通过 @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 论坛中找到了一个修复程序。这似乎只是一个测试版错误:
要修复,请为您的模型类创建一个扩展:

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 论坛中发现这一点的人。

关于iOS 14 Beta - Swift UI 中的核心数据错误 : No NSEntityDescriptions in any model claim the NSManagedObject subclass,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62852413/

相关文章:

swift - 使用 Swift 并发和观察框架 iOS 17 监听搜索栏随时间变化的值

ios - 曲线的渐变,用 quartz 2d 绘制

ios - 将来自服务器的 UTC 日期存储在 NSDate 对象中

ios - Xcode 或 native-react 锁定到错误的根目录来搜索 .ios.js 文件

iphone - 包含新启动画面时非 4 英寸应用程序顶部对齐

iOS Core Data 无法从存储的 URI 打开图像

ios - 使用 Magical Record 导入的记录不会立即显示在 tableView 中

iphone - 如何提高 SQLite3 iPhone 程序的性能

swift - MapKit 错误 : NSHostingView is being laid out reentrantly while rendering its SwiftUI content

swift - 如何在 SwiftUI 中为 ForEach 中的特定按钮设置动画?