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