我正在玩Swift中的WatchKit应用程序的应用程序组中共享Core Data模型,松散地跟踪/模仿this guy's work。我创建了一个自定义框架(称为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
文件并将其设为 public 类时,错误就会消失。但这让我有点不舒服 - 我已经接受过培训,从不接触自动生成的Core Data类,因为它们可能需要随时重新生成,因此我倾向于在类别中添加辅助方法等在自动生成的Core Data类上。
同样,除非我公开,否则我无法访问altitude
变量。
我在某个地方出错了吗?有没有办法可以确保在导入框架时可以看到我自动生成的Core Data实体类,而无需手动向其添加public
关键字?
答案 0 :(得分:0)
确保在类声明中添加@objc(CoreDataClassName)。稍微修改原始代码:
import Foundation
import CoreData
@objc(FlightStatus) class FlightStatus: NSManagedObject {
@NSManaged var altitude: NSNumber
}
编辑:我刚看到您在原帖的评论中提到,这样做并没有帮助。您是否完全遵循上述格式?此外,关于你的直觉,你不应该搞乱CD自动生成的文件 - 苹果显然仍然在解决与Swift的核心数据集成的一些问题,所以不幸的是,经常需要一些修补。 (另一个例子:Core Data目前不会自动生成对期权的任何支持。)