Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/103.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Swift-框架中的共享核心数据-自动生成的类是';不公开?_Ios_Swift_Core Data_Ios8_Watchkit - Fatal编程技术网

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

Ios Swift-框架中的共享核心数据-自动生成的类是';不公开?,ios,swift,core-data,ios8,watchkit,Ios,Swift,Core Data,Ios8,Watchkit,我在Swift的WatchKit应用程序组中共享核心数据模型,松散地跟随/模仿。我创建了一个自定义框架(称为CoreDataKit),并将.xcdatamodeld文件仅作为框架目标的成员;我创建了一个CoreDataStack对象,该对象创建并管理核心数据堆栈,它也是框架目标的一个成员。最后,我在数据模型中创建了一个新实体,然后使用Xcode为该实体自动生成Swift文件,它给出了一个类结构,如下所示: import Foundation import CoreData class Flig

我在Swift的WatchKit应用程序组中共享核心数据模型,松散地跟随/模仿。我创建了一个自定义框架(称为
CoreDataKit
),并将.xcdatamodeld文件仅作为框架目标的成员;我创建了一个
CoreDataStack
对象,该对象创建并管理核心数据堆栈,它也是框架目标的一个成员。最后,我在数据模型中创建了一个新实体,然后使用Xcode为该实体自动生成Swift文件,它给出了一个类结构,如下所示:

import Foundation
import CoreData

class FlightStatus: NSManagedObject {
    @NSManaged var altitude: NSNumber
}
当我将
CoreDataKit
导入iOS应用程序中的我的view controller以开始处理核心数据时,我能够访问
CoreDataStack
,但不能访问
FlightStatus
类-我得到一个
使用未声明类型“FlightStatus”的错误


但是,当我进入
FlightStatus.swift
文件并将其设置为公共类时,错误就消失了。但这让我有点不舒服——我接受过培训,从未接触过自动生成的核心数据类,因为它们可能需要随时重新生成,因此我倾向于在自动生成的核心数据类的类别中添加助手方法等

类似地,我无法访问
高度
变量,除非我将其公开

我哪里出了问题吗?是否有一种方法可以确保在导入框架时,我的自动生成的核心数据实体类是可见的,而不必手动向它们添加
public
关键字?

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

import Foundation
import CoreData

@objc(FlightStatus) class FlightStatus: NSManagedObject {
    @NSManaged var altitude: NSNumber
}

编辑:我刚刚看到你在最初的帖子评论中提到这样做没有帮助。你完全按照上面的格式做了吗?另外,根据你的直觉,你不应该弄乱CD自动生成的文件——苹果显然仍在解决Swift核心数据集成的一些问题,所以不幸的是,经常需要一些修补。(另一个例子:Core Data目前不会自动生成对optionals的任何支持。)

只是猜测,因为这在其他情况下有所帮助:手动将
@objc(FilghtStatus)
添加到
关键字上方。这是swift中的一个“错误”,偶尔会导致未找到托管对象子类。唉,没有帮助。(无论如何,这是一个纯粹的Swift项目。)此外,这仍然需要我手动触摸该类。“我接受过培训,从不触摸自动生成的核心数据类,因为它们可能需要随时重新生成,因此我倾向于在自动生成的核心数据类的类别中添加辅助方法等。”去年,我向WWDC的一位核心数据工程师提到了同样的事情,他告诉我他们只是第一次自动生成类。之后,您可以手动更改它。如果你不明白,我会说不要担心不想接触自动生成的Swift类。正如蒙迪所说,这可能是Swift的问题。哦,我知道你可以手动更改它们。但我不想这样做,因为如果你以后想更改数据模型,比如添加一些字段或关系,然后你想快速重新生成类,它会覆盖你卡在那个类中的任何内容。我想我会耐心等待,这听起来越来越像一个Swift核心数据问题