Swift Core Data:自动生成托管对象子类使类名在模型中为 PRODUCT_MODULE_NAME.entityName
Posted
技术标签:
【中文标题】Swift Core Data:自动生成托管对象子类使类名在模型中为 PRODUCT_MODULE_NAME.entityName【英文标题】:Swift Core Data: auto-generating managed object subclass makes the class name to PRODUCT_MODULE_NAME.entityName in model 【发布时间】:2015-04-11 02:58:23 【问题描述】:我正在制作一个纯 Swift 项目,当我在模型文件中创建实体时,然后使用 Editor->Create NSManagedObject Subclass
为实体创建类文件,在模型中,实体的 Class
属性变为 PRODUCT_MODULE_NAME.entityName
,这将导致核心数据无法加载 NSManagedObject 子类实例。
我知道如何通过使用@objc()
并重命名模型文件中的类属性,但有什么更好的办法吗?
【问题讨论】:
感觉Xcode中的“Create NSManagedObject Subclass ...”还是坏掉了...应该是$PRODUCT_MODULE_NAME.entityName
,应该自动展开。这行得通吗?
我认为您不需要 @objc() 和在模型文件中更改名称 - 我认为这是其中之一。 Swift 命名空间的根本问题 - 要么将实体转换为目标 C,要么在其名称前加上模块名称。
【参考方案1】:
两种选择:
将PRODUCT_MODULE_NAME
替换为此构建设置的值。默认情况下,它将与您的TARGET_NAME
相同。 Class 字段中的完整值应类似于MyApp.entityName
。
在 Class 字段中仅使用 entityName
并在您的 swift 类前面加上 @objc(entityName)
数据模型中的 representedClassName
字段似乎是在运行时评估的,因此它需要一个文字值。
【讨论】:
以上是关于Swift Core Data:自动生成托管对象子类使类名在模型中为 PRODUCT_MODULE_NAME.entityName的主要内容,如果未能解决你的问题,请参考以下文章
iOS:Swift:Core Data:值不使用 Private ManagedObjectContext 存储
在 Core Data 中执行子获取时,在父上下文中修改托管对象是不是会向下传播到子上下文?