Xcode 11无法识别Core Data实体。

15

我刚刚声明了一个名为 "Users" 的数组实体:


var UsersArray = [Users]()

我遇到了这个错误:

未解决标识符"Users"的使用

提示:我已经导入了CoreData并创建了实体。


嗯,Users 定义在哪里?要有一个对象数组,该对象必须在某处定义。您需要创建该类的 classstruct 来创建其数组。 - impression7vx
这是在一个视图控制器中,我认为CoreData会自动创建它的数据模型类,所以我没有创建实体“Users”类。 - CoderTn
啊,我明白了。我们能看到你的实体模型吗? - impression7vx
1
请确保实体的 Codegen 属性设置为模型中的“类定义”,否则您需要在“编辑器->创建 NSManagedObject 子类...”下自行生成类。在编辑或更改模型后,可能需要清理和重新构建项目,如果尚未尝试,请尝试该方法。 - Joakim Danielson
@JoakimDanielson 这应该是在我添加实体时自动生成的,对吧?我正在使用 Xcode 11。 - CoderTn
9个回答

35
请尝试以下解决方案!! 解决方案1: 选择Product->Build for testing,它可以解决大部分未解决的标识符问题(由于某些奇怪的原因,它可以解决大部分未解决的标识符问题)。
解决方案2: 将import Foundation更改为import UIKit。 似乎UIApplication未包含在Foundation框架中。
解决方案3: 突出显示数据模型,转到Editor -> Create NSManagedObject Subclass...。
解决方案4: 创建NSManagedObject文件,然后删除它们,一切都会解决。
希望这有所帮助,谢谢。

更新到Xcode 11后,我遇到了完全相同的问题。构建/运行它解决了这个问题。 - Adam S.
愉快的编程,开心无比 :-) - Yogesh Patel
6
方案3有效。实际上,您可以创建NSManagedObject文件,然后将其删除,这样就可以解决问题了。 - pluto puppy
我更新了答案,并将您的建议添加为解决方案4。这对所有人都有帮助。谢谢! - Yogesh Patel
1
太棒了,谢谢!是第四个解决方案解决了我的问题。 - Benjamin Hutter

25
如果实体已经创建,请关闭并重新打开XCode。这个方法每次都适用于我。其他解决方案,例如清除构建、构建等,对我没有效果。

3
谢谢。这应该是解决这个问题的第一次尝试! - Monim Kaiser
1
我不知道为什么苹果无法解决这个问题。我尝试过清理、删除派生数据,但都没有起作用。在尝试这个方法之前,我也手动创建了模型(可怜我)。虽然有些晚了,但还是感谢这个提示。 - Dinakar

4

在重命名一个实体后,我遇到了这个问题,并想在这里发布一下我是如何解决的。

通常,在更改数据模型并出现编译错误后,我只需通过“Product”>“Clean Build Folder”,然后“Product”>“Build”即可解决错误。

然而,这次上述步骤没有帮助。经过一番思考,我通过以下步骤找到了罪魁祸首:

  1. 在项目导航器中,选择您的.xcdatamodelId文件
  2. 在配置部分中,选择适当的配置
  3. 查找有问题的实体,并确保类名称正确(在我的情况下,实体和类不相同)

在一个新项目中看到了这个。它创建了一个“默认”配置。在选择.xcdatamodeld文件后,在“标识和类型”下看到类型是“默认 - Core Data Model”。切换到“Core Data Model”。编译后错误消失了。然后可以切换回“默认 - Core Data Model”,错误不会再出现。怀疑退出项目(或者可能是Xcode),然后重新进入可能会产生类似的效果。 - anorskdev
有点类似,我将类型更改为应用程序包。惊慌失措。CoreData已经消失了,但是我执行了“文件/添加文件到...”并重新添加了.xcdatamodeld文件,然后能够成功编译。该类型已被设置回“默认-Core Data模型”。这是在尝试了我能够在这里和其他地方找到的所有其他方法之后。抱怨。我想做的就是找到一种为实体编写自定义初始化器的方法。我的整个CoreData数据也神奇地消失了。抱怨... - Mojo Techno

2

其他可能的解决方案:

(A) 重新启动 Xcode

这是对我有效的解决方案。(查看此答案

(B) 检查是否忘记完成实体描述

通常:忘记为其中一个属性分配类型(仍处于“未定义”状态)。

(C) 清除派生数据

原因:生成的核心数据托管对象子类的源代码文件位于项目的派生数据位置。 注意:如果使用 SPM,则可能需要重新链接您的 Swift 包。


0

对我来说,实体名称和类名是不同的,而我正在引用实体名称作为数据类型

enter image description here


0

我在使用最新的Xcode12.3开发SwiftUI项目时,遇到了这个问题,因为我在项目创建时没有勾选CoreData选项。

在添加一个类来实例化NSPersistentContainer、加载存储、创建model.xcdatamodel文件以及在视图上添加一个文本字段和一个按钮后,它显示了一个错误,说:“无法在范围内找到Item”。

当你期望实体帮助自动完成时,编写代码有点困难。起初,我以为我忘记初始化我的类或者漏掉了一个括号,但事实并非如此。

我尝试多次清理、重建和运行项目,但都失败了。我不得不关闭这个特定的项目,然后所有的错误都消失了。无需重新启动Xcode。


0

我遇到了同样的问题。在项目开始时没有包含Coredata。后来添加了必要的文件和核心数据堆栈。但是当尝试从实体名称中获取数据时,Xcode会抛出相同的错误。

后来,我关闭了项目,再次在Xcode中打开它,然后它开始工作了。


0
  1. 点击您的数据模型 例如:DataModel.xcdatamodeld
  2. 点击编辑器 > 创建NSManagedObject子类 它将通过扩展CoredataClass创建Item类和其他一个类。 删除所有它们(刚生成的文件)
  3. 现在尝试重新构建项目

0

我在这个项目中遇到了一个问题,与我在另一个项目中创建并移动到此项目中的 .xcdatamodel 有关。

我通过选择 .xcdatamodel 文件,关闭 "文件检查器",然后在 "目标成员资格" 下确保选择了所有目标来解决它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接