2010-11-12 42 views
19

我有一个工作正常的项目。它检查了“核心数据”,并且已经建立了数据模型。我今晚才开始添加一些实体和属性。当我尝试运行我的应用程序时,它甚至不会加载。它只是在我身上崩溃。executeFetchRequest:错误:获取请求必须具有实体

这里的错误:

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

我真的很害怕,因为我没有这方面的一个备份,如果我不能得到它的工作,我不知道我会做。 :)

在此先感谢!

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

+0

您需要发布代码的相关部分。 – Yuji 2010-11-12 04:33:01

+0

你喜欢哪个部位? – 2010-11-12 04:34:38

+0

围绕executeFetchRequest:error:call的代码将对理解您的问题非常有帮助。 – 2010-11-12 05:55:52

回答

11

它好像我的数据被损坏了,所以我删除了我的数据模型,并在iPhone模拟器的数据库,并开始新鲜。

+0

是的,不要忘记从应用程序中删除应用程序模拟器! – Nuthatch 2013-02-09 23:31:24

11

我有同样的错误。

对于我来说,那是因为我添加了一个新的模型版本,但我并没有将其设置为“当前版本”。不小心我!要解决此问题,请选择xcdatamodel,然后单击设计>数据模型>设置当前版本。 xcdatamodel文件将会有一个绿色的勾号。

希望有帮助。

+0

谢谢 - 我也收到了其中一个。 – 2012-02-21 12:29:12

15

寻遍为一个解决方案,有什么固定它,我在做一个清洁/在Xcode中创建后。

产品 - >清洁,产品展示 - >生成,然后尝试运行它。

+0

我都在模拟器中删除了应用程序,并执行了Clean/Build。同样的问题,所以这并没有解决我的问题。我不想删除并重新创建复杂的数据模型。那么,如何非破坏性地纠正这个问题呢? – 2013-05-03 20:53:25

+0

为什么倒票,@JayImerman?对不起,我的回答对你不起作用,但这并不意味着你应该对其投票。您是否尝试过模拟器中的“重置内容和设置”?它在真实设备上工作吗? – 2013-05-04 02:19:07

0

只需添加相同的问题。我复制了我的所有实体。删除数据模型,重新创建一个空模型,并将实体粘贴回新的数据模型。解决了我的问题。

1

我建立干净,并没有解决它。然后我删除了应用程序,但没有解决它。然后我建立了干净的并在同一时间删除了应用程序,并修复了它。

0

首先,我通过管理下载的应用程序的数据(看发生了什么事),发现它给了我把它保存在以前的项目名称。这让我感到困惑。于是我退出了XCode 4.6.1,从我的iPhone中删除了应用程序(及其数据),然后又回来了。

这一次,我得到了一个错误说Cannot create an NSPersistentStoreCoordinator with a nil model。所以我查看了AppDelegate.m文件并更改了URLForResource- (NSPersistentStoreCoordinator *) persistentStoreCoodinator方法。它被设置为我的应用程序的名称,并将其更改为'Model'以匹配我的Model.xcdatamodeld的名称。
现在正在工作。

21

我的问题是我没有使用实体和类相同的名称。解决它的简单解决方案是给他们相同的名字。

+0

这是一个微不足道的解决方案吗?您可以简单地修改数据模型中的默认配置(映射:实体 - >类)。 – gaussblurinc 2015-11-25 15:09:21

7

此外,请确保您的.xcdatamodeld文件位于Build阶段的“复制软件包资源”阶段。

6

检查,

  • 实体存在于xcdatamodel文件。
  • 使用的实体名称相同。
0

在我从错误的数据库中提取时,发生了这种情况。我的应用程序有3个sqlite数据库,当然还有3个ManagedObjectContext实例。那么我提交错误的ManagedObjectContext到一个方法,要求它查询我提交的ManagedObjectContext中不存在的表。使用正确的ManagedObjectContext后,一切都很好。

16

如果您正在使用MagicalRecoredSwift

请确保您使用@objc指令在斯威夫特NSManagedObject子使课堂访问Objective-C代码从MagicalRecord库

@objc(MyEntity) 
class MyEntity: NSManagedObject { 
    @NSManaged var myAttribute: Int16 
} 
+2

谢谢!不管什么时候重新创建NSManagedObject子类,实体文件都会被覆盖。有没有比每次手动添加该行更好的方法? – apb 2015-04-19 20:58:26

+0

应用程序崩溃在iOS 9.3但与iOS 10.3, 当我添加@objc(MyEntity)建议它在iOS 9.3上工作,但应用程序在iOS 10.3上崩溃任何想法为什么它崩溃? – 2017-05-19 07:41:16

0

我认为原来的问题和问题,以及大多数这些答案修复的问题(只是以不同的方式)只是一个简单的问题:

无论何时您修改核心数据(如您所提到的添加实体),您必须删除所有现有数据(如果尚未发布您的应用程序)或向您的模型添加新版本。

只是想我会张贴这个答案,即使这是一个较老的问题,因为这个答案似乎很明显,迄今为止还没有在我上面的任何问题或评论中讨论过。

0

您还可以使用setter方法从CoraData ......只是做这样的事情......

在您CustomCoreDataManager.m

进口“ObjectiveRecord.h” 调用init()方法是这样

(instancetype)init {

self = [super init];

如果(个体){

[[CoreDataManager sharedManager] setModelName:@ “YourModelName”]; }

return self; }

希望这有助于有人...

3

下面是固定的,对我来说:

当我转换为斯威夫特3时,Xcode是给我一个错误,宣布了新的NSFetchRequest时,他说,它需要一个类型。加入这个类型之后,我做了别人会假设的东西;如果请求是键入的,为什么指定一个实体名称?所以,我删除了它。

这实际上是我的错误。

Swift 2。2:

let request = NSFetchRequest(entityName: "MyEntity") 

当我首先转换为夫特3:

let request = NSFetchRequest<MyEntity>() 

即是给我一个错误。我结束了与此:

let request = NSFetchRequest<MyEntity>(entityName: "MyEntity") 

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

1

如果您使用的斯威夫特3和核心数据的新堆栈的语法:

var persistentContainer: NSPersistentContainer = { 
    let container = NSPersistentContainer(name: "MyAppModel") 
    container.loadPersistentStores(completionHandler: { 
     (storeDescription, error) in 
     if let error = error as NSError? { 
      fatalError("Unresolved error \(error), \(error.userInfo)") 
     } else { 
      print(storeDescription) 
     } 
    }) 
    return container 
}() 

,那么你应该使用这个取语法:

let request: NSFetchRequest<Client> = Client.fetchRequest() 

我有这个错误在第一次提取应用程序中使用不同的变化时,启动后:

let request: NSFetchRequest<NSFetchRequestResult> = Client.fetchRequest() 

let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Client") 
0

也许你正试图从不同的/错误的包中加载数据库? 例如来自或在一个框架内?

我有这个问题,并通过加载相关框架的bundle DB来解决它。然后它一切正常!

雨燕4 + MagicalRecord:

let frameworkBundle = Bundle(for: AClassFromTheFramework.self) 
let managedObjectModel = NSManagedObjectModel.mergedModel(from: [frameworkBundle]) 
MagicalRecord.setShouldAutoCreateManagedObjectModel(false) 
NSManagedObjectModel.mr_setDefaultManagedObjectModel(managedObjectModel) 
MagicalRecord.setupCoreDataStack(withAutoMigratingSqliteStoreNamed: "db.sqlite") 

瞧!

相关问题