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

标签 ios swift core-data ios8 watchkit

我正在尝试在 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/

相关文章:

ios - 检查 NSArray 是否排序

swift - 类中属性的初始化,具体是惰性属性?

xcode - 错误 : value of tuple type '(NSString, NSString)' has no member '0'

swift - 从过去 7 天的核心数据中提取实体

objective-c - 核心数据无效规则不起作用?

ios - 如何使用UIDocumentBrowserViewController在iCloud上重新打开UIDocument

ios - swift 4 xcode 应用程序不读取 json 文件

ios - 如何找到 TableView 的最后一个 indexPath 单元格?

ios - ECC Curve25519 钥匙串(keychain)

ios - 确保“今天”扩展程序已更新了核心数据中的信息