CoreData 无法正确“创建 NSManagedObject 子类”Swift

Posted

技术标签:

【中文标题】CoreData 无法正确“创建 NSManagedObject 子类”Swift【英文标题】:CoreData Can't Properly 'Create NSManagedObject Subclass' Swift 【发布时间】:2016-09-28 19:28:24 【问题描述】:

总的来说,我在使用 Xcode 时遇到了很多问题,但我的所有项目才刚刚开始出现这种情况。

我创建了一个新实体,我的核心数据模型选择了正确的“目标成员”。

但是一旦我尝试为我的新实体选择“创建 NSManagedObject 子类”,向导会正确引导我完成所有必要的步骤,并且我会得到以下生成的 Swift 代码:

import Foundation
import CoreData


class CoreDatGeneric: NSManagedObject 

// Insert code here to add functionality to your managed object subclass




import Foundation
import CoreData


class CoreDatGeneric: NSManagedObject 

// Insert code here to add functionality to your managed object subclass


但是...我不能在我的代码中使用这个名为 CoreDatGeneric ANYWHERE 的新 Swift 类...

例如,

let data = DoreDatGeneric()

导致编译器错误声明Use of unresolved identifier 'CoreDatGeneric'

我不知道为什么会突然发生这种情况,我所有其他较旧的 Core Data 实体都可以正常工作,但我被困在无法再在我的任何项目中使用核心数据的地步。

我非常担心升级到 Xcode 8,因为最新的 Xcode 收到了负面评论。我现在正在使用 Xcode 7。

【问题讨论】:

你确定CoreDatGeneric.swift 属于 Xcode 中的应用目标吗?你也确定你的班级名称拼写正确吗?你在你的问题中拼错了...... 【参考方案1】:

转到数据模型检查器面板并选择 Codegen 为“手动/无”。在编辑器下创建托管子类。 Xcode 将创建两个 swift 文件。一个是 *Properties.swift,一个包含模型所有属性的扩展文件(Xcode 会在你创建子类时覆盖这个文件)。另一个是 *Class.swift,您可以在其中添加自定义类行为。无需编写任何代码,您应该能够调用

let data = CoreDatGeneric() 

在您的 ViewController 中。

如果 Codegen 说“类定义”,那么您不必执行创建托管子类,因为在您构建项目时会为您创建类(文件不会显示在项目检查器中)。但是,您仍然可以在 viewController 中创建一个如上所述的变量(例如)。

【讨论】:

以上是关于CoreData 无法正确“创建 NSManagedObject 子类”Swift的主要内容,如果未能解决你的问题,请参考以下文章

无法在 CoreData swift 中保存数据

CoreData:警告:无法加载名为的类

Swift/CoreData:-[:]:发送到实例的无法识别的选择器

如何检索由具有不正确 CoreData 架构的更新 iOS 应用程序导致的数据丢失

删除CoreData对象

用 CoreData 对象填充 NSSet