我在Swift中的WatchKit应用程序的应用程序组中共享核心数据模型,松散地模仿/模仿这个家伙的工作。我创建了一个自定义框架(称为CoreDataKit
),并将.xcdatamodeld文件作为框架目标的成员;我创建了一个CoreDataStack
对象,用于创建和管理核心数据堆栈,它也是框架目标的唯一成员。最后,我在数据模型中创建了一个新的实体,然后使用Xcode为该实体自动生成Swift文件,它给出了一个类结构,看起来像:
import Foundation
import CoreData
class FlightStatus: NSManagedObject {
@NSManaged var altitude: NSNumber
}
当我将CoreDataKit
导入iOS应用程序中的视图控制器以开始执行核心数据操作时,我可以访问CoreDataStack
,但不能访问FlightStatus
类-我会收到Use of undeclared type 'FlightStatus'
错误。
然而,当我进入FlightStatus.swift
文件并使其成为公共类时,错误就会消失。但这让我有点不舒服——我受过训练,永远不要接触自动生成的核心数据类,因为它们可能随时需要重新生成,因此我倾向于在自动生成的关键数据类上添加辅助方法等。
类似地,我不能访问altitude
变量,除非我将其公开。
我是不是哪里出错了?有没有一种方法可以确保我的自动生成的核心数据实体类在导入框架时是可见的,而不必手动向它们添加public
关键字?
确保在类声明中添加@objc(CoreDataClassName)。稍微修改您的原始代码:
import Foundation
import CoreData
@objc(FlightStatus) class FlightStatus: NSManagedObject {
@NSManaged var altitude: NSNumber
}
编辑:我刚刚看到你在最初帖子的评论中提到这样做没有帮助。你完全遵循了上面的格式吗?此外,关于你的直觉,你不应该干扰CD自动生成的文件——苹果显然仍在解决Swift核心数据集成的一些问题,所以不幸的是,经常需要进行一些修补。(另一个例子:Core Data目前没有自动生成任何对选项的支持。)