Swift 3 核心数据“实体”错误:`使用未声明的类型`

Posted

技术标签:

【中文标题】Swift 3 核心数据“实体”错误:`使用未声明的类型`【英文标题】:Swift 3 Core Data "Entity" error: `Use of undeclared type` 【发布时间】:2017-02-17 11:39:42 【问题描述】:

Use of undeclared type 'Transcription'

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

我就得到了上面的错误:let fetchRequest: NSFetchRequest<Transcription> = Transcription.fetchRequest()

我仔细检查了,实体“转录”在我的 .xcdatamodeld 文件中拼写正确

本教程是为 Swift 3 设计的,但是自从它发布以来我修复了另一个更改,所以我猜测过去 2 个月对 Swift 的其他一些更改导致了这个错误。

我是 Core Data 的新手,所以我不知道如何调试它。非常感谢您的解决方案!

【问题讨论】:

将 CoreData 导入您的班级 【参考方案1】:

不要忘记import CoreData 到你的子类

【讨论】:

【参考方案2】:

这可能是因为 Xcode 无法确定.xcdatamodel 的路径,清理项目时可以看到相关错误。当更改.xcdatamodel 的名称 时,此错误发生在我的一个项目中。

决议涉及以下内容:

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

【讨论】:

如果您在 Xcode 中遇到描述的错误,请尝试构建项目。如果构建成功,执行上述方法,Xcode 中的错误将被删除! 这解决了我的问题,谢谢!你知道什么会导致这种情况吗?【参考方案3】:

我也遇到过同样的错误,我用的是 Xcode 8.2.1 。我清理了项目,关闭了Xcode并重新打开它,构建后错误消除了。

【讨论】:

【参考方案4】:

突出显示数据模型,转到编辑器 -> 创建 NSManagedObject 子类...

这解决了错误

【讨论】:

伟大的 PlateReverb, 我对我的实体 Quote 进行了尝试,然后我开始收到“'Quote' 的重新声明无效。我使用的是 Xcode 8.3【参考方案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后重新打开,我的问题就解决了。

【讨论】:

【参考方案6】:

使用 Xcode 版本 8.2 beta (8C30a),当我添加或修改实体时,我得到同样的错误。在数据模型检查器中,将 Codegen 选项改回 Manual/None,就好像我要自己生成动态类一样。保存,然后改回类别/扩展,它似乎工作。 (我也曾尝试使用 Option-Clean 清理项目,重新启动 XCode,但能够轻松重现它。)希望升级 8.3 beta 修复此错误。

【讨论】:

谢谢。你的帖子让我越过了终点线。这是我发现的一篇解释各种设置的帖子。 useyourloaf.com/blog/core-data-code-generation【参考方案7】:

没有。 1)我们创建子类,去Editor -> Create NSManagedObject Subclass... 然后将子类文件替换到同一个项目的文件夹中:

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

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

【讨论】:

【参考方案8】:

对我来说,我必须从我的 .xcdatamodeld 文件中删除给我带来错误的实体(在您的情况下为“转录”),然后手动重新添加。

【讨论】:

以上是关于Swift 3 核心数据“实体”错误:`使用未声明的类型`的主要内容,如果未能解决你的问题,请参考以下文章

NSFetchRequest as entityName 给出错误“使用未声明的类型”

Swift 3 核心数据 NSInternalInconsistencyException entityForName 无法在此模型中找到名为 Foo 的实体

UITextViewDelegate 方法在 Swift 3 和 Xcode 8.0 中给出“使用未声明的类型 URL”错误

iOS:Swift:核心数据:错误:+entityForName:nil 不是搜索实体名称的合法 NSManagedObjectContext 参数

在 Swift 3(核心数据)中引用实体属性

升级到 XCode 6.3.2 后核心数据模型找不到自动生成的实体类(使用 Objective-C 而不是 Swift)