Swift - 框架中的共享核心数据 - 自动生成的类是不公开的?

时间:2015-02-19 23:39:40

标签: ios swift core-data ios8 watchkit

我正在玩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关键字?

1 个答案:

答案 0 :(得分:0)

确保在类声明中添加@objc(CoreDataClassName)。稍微修改原始代码:

import Foundation
import CoreData

@objc(FlightStatus) class FlightStatus: NSManagedObject {
    @NSManaged var altitude: NSNumber
}
编辑:我刚看到您在原帖的评论中提到,这样做并没有帮助。您是否完全遵循上述格式?此外,关于你的直觉,你不应该搞乱CD自动生成的文件 - 苹果显然仍然在解决与Swift的核心数据集成的一些问题,所以不幸的是,经常需要一些修补。 (另一个例子:Core Data目前不会自动生成对期权的任何支持。)