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