executeFetchRequest:error:获取请求必须具有实体

sud*_*-rf 20 iphone crash xcode core-data objective-c

我有一个工作正常的项目.检查了"核心数据",并设置了数据模型.我今晚才开始添加几个实体和属性.当我尝试现在运行我的应用程序时,它甚至不会加载.它只是在我身上崩溃了.

这是错误:

'NSInvalidArgumentException', reason: 'executeFetchRequest:error: A fetch request must have an entity.'

我真的很害怕,因为我没有这个的备份,如果我不能让它工作,我不知道我会做什么.:)

提前致谢!

编辑:我厌倦了我的数据,所以我只是将一个新的空白xcdatamodel复制到我的项目中,我将重新开始.谢谢您的帮助!

sys*_*hen 21

我的问题是我没有为Entity和Class使用相同的名称.修复它的简单解决方案是给它们相同的名称.


War*_*shi 16

如果您使用的是MagicalRecored带有Swift:

确保@objc在Swift NSManagedObject子类中使用指令使类可以从MagicalRecord库中访问Objective-C代码

@objc(MyEntity)
class MyEntity: NSManagedObject {
    @NSManaged var myAttribute: Int16
}
Run Code Online (Sandbox Code Playgroud)

  • 谢谢!任何时候重新创建NSManagedObject子类时,实体文件都会被覆盖.有没有比每次手动添加该行更好的方法呢? (2认同)

Jak*_*ler 15

在搜索完所有解决方案后,为我修复的是在Xcode中进行清理/构建.

产品 - >清洁,产品 - >构建,然后尝试运行它.


sam*_*ize 12

我有同样的错误.

对我来说,这是因为我添加了一个新的模型版本,但我没有将其设置为"当前版本".粗心的我!要修复,请选择xcdatamodel,单击设计>数据模型>设置当前版本.然后xcdatamodel文件将有一个绿色勾号.

希望有所帮助.


sud*_*-rf 11

好像我的数据被破坏了,所以我在iPhone模拟器中删除了我的数据模型和数据库,并开始新鲜.


uff*_* da 8

此外,请确保您的.xcdatamodeld文件位于Build Phases的"Copy Bundle Resources"阶段.


Sim*_*ain 7

这是为我解决的问题:

当我转换到 Swift 3 时,Xcode 在声明一个 new 时给了我一个错误NSFetchRequest,说它需要一个类型。添加类型后,我做了其他人会假设的事情;如果输入了请求,为什么要指定实体名称?所以,我删除了它。

这实际上是我的错误。

斯威夫特 2.2:

let request = NSFetchRequest(entityName: "MyEntity")
Run Code Online (Sandbox Code Playgroud)

当我第一次转换为 Swift 3 时:

let request = NSFetchRequest<MyEntity>()
Run Code Online (Sandbox Code Playgroud)

那是给我一个错误。我结束了这个:

let request = NSFetchRequest<MyEntity>(entityName: "MyEntity")
Run Code Online (Sandbox Code Playgroud)

一切正常。就个人而言,如果您正在输入请求,我不确定为什么需要指定实体名称。也许他们会在某个时候更新(我希望)


ami*_*abi 7

我在苹果开发者论坛中找到了这个解决方案,这正是我的问题!

解决方案是上下文必须在 struct App 中定义。不在环境参数中

import SwiftUI
@main
struct CoreDataDemoApp: App {
    
    private let context = CoreDataStack.context. 
    var body: some Scene {
        WindowGroup {
            ContentView()
                .environment(\.managedObjectContext, context)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


aTo*_*Toz 6

检查是否,

  • 该实体存在于xcdatamodel文件中.
  • 使用的实体名称相同.