Swift 3 Core Data中的“实体”错误:`使用未声明的类型`。

10

使用未声明的类型“Transcription”

我正在遵循这个简单的Swift 3核心数据教程(https://learnappdevelopment.com/uncategorized/how-to-use-core-data-in-ios-10-swift-3/)。

在代码行中,我在这句话上面得到了以上错误:let fetchRequest: NSFetchRequest<Transcription> = Transcription.fetchRequest()

我仔细检查过,在我的.xcdatamodeld文件中实体“Transcription”拼写正确。

该教程是为Swift 3设计的,但自发布以来已经有了其他更改,我已经修复了它们,因此我猜测在过去的两个月中对Swift进行了一些其他更改,导致了这个错误。

我对Core Data毫不了解,所以我不知道如何调试。如果能提供解决方案,我将不胜感激!


将CoreData导入到你的类中。 - Badre
8个回答

15

不要忘记将import CoreData导入到你的子类中


12

可能是因为Xcode无法确定.xcdatamodel的路径,这可能导致相关错误。在更改.xcdatamodel名称时,我的一个项目出现了此错误。

解决方法如下:

  • 前往产品 -> 清除 (Shift-Cmd-K)
  • 如果错误仍然存在
    • Ctrl-点击 (右键点击)有问题的.xcdatamodel -> 在Finder中显示
    • 拖动.xcdatamodel以导入项目,应该会创建一个新条目
    • 删除先前的.xcdatamodel条目。
  • 构建 (Cmd-B)确认修复

如果您在Xcode中遇到了上述错误,请尝试构建项目。如果构建成功,请按照上述方法操作,Xcode中的错误将被移除! - Ing. Ron
这个解决了我的问题,谢谢!你知道这种情况最初是什么原因吗? - Shannon Fluellen

8

我曾经遇到过同样的错误,我使用的是Xcode 8.2.1。我清理了项目,关闭了Xcode并重新打开它,在编译后错误消失了。


5

强调数据模型,进入编辑器->创建NSManagedObject子类...

这解决了错误。


优秀的PlateReverb。 - Raj Joshi
我尝试对我的实体Quote进行了这样的操作,结果开始出现“重复声明'Quote'的无效声明。我在使用Xcode 8.3。 - MarkAurelius

5
在我的情况下,Xcode 没有找到自动生成的类,大概是这样的:
//
//  Teste+CoreDataClass.swift
//  
//
//  Created by Laura Corssac on 2/2/20.
//
//  This file was automatically generated and should not be edited.
//

import Foundation
import CoreData

@objc(Teste)
public class Teste: NSManagedObject { }

退出Xcode后重新打开,问题得到解决。


1

使用 Xcode 版本 8.2 beta (8C30a) 时,当我添加或修改实体时,会得到相同的错误。在数据模型检查器中,将 Codegen 选项更改回手动 / 无,就像我要自己生成动态类一样。保存,然后改回分类 / 扩展,似乎可以解决问题。(我也尝试了使用 Option-Clean 清理项目,重启 XCode,但很容易再现该问题。) 希望升级到 8.3 beta 可以修复此 bug。


谢谢你。你的帖子帮助我走向胜利之路。这是我找到的一篇文章,它解释了各种设置。https://useyourloaf.com/blog/core-data-code-generation/ - Adrian

0

不。 1)我们创建子类,进入编辑器 -> 创建NSManagedObject子类... 然后将子类文件替换为同一项目的文件夹:

Creating NSManagedObject

2) 然后在 Xcode -> 首选项中删除 derivedData 中的文件:

Deleting derivedData

3) 然后删除 NSManagedObject 子类旧文件的引用,因为它们会自动创建系统:

enter image description here


0
对我来说,我必须从我的.xcdatamodeld文件中删除导致错误的实体,在你的情况下是“Transcription”,然后手动重新添加它。

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