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 中执行子获取时,在父上下文中修改托管对象是不是会向下传播到子上下文?

Core Data - 通过 URI 获取托管对象

使用Core Data将文本从文本字段分配到托管对象上下文

为啥调试器不知道我的 Core Data 生成的托管对象类上的方法? (附代码)

Swift 中大量 Core Data 批量插入的内存泄漏