向 Xcode 10 Core Data 生成的文件添加方法
Posted
技术标签:
【中文标题】向 Xcode 10 Core Data 生成的文件添加方法【英文标题】:Adding a method to an Xcode 10 Core Data generated file 【发布时间】:2019-04-22 14:27:32 【问题描述】:这个问题可能在别处有答案,但我只找到过时版本的 Xcode 或使用 Swift 的项目的答案。
我正在使用 Xcode 10 并阅读 ios Programming The Big Nerd Ranch Guide, 4th Edition。我正在使用这么旧的版本,因为这是我的工作提供给我的资源。
目前我正在尝试将一个方法添加到为 Objective-C 生成的 CoreData 类。
将 CodeGen 设置为 Category/Extension 并在 CoreData 中选择我的实体,生成的类文件是:
BNRItem+CoreDataProperties.h/m
BNRItem+CoreDataClass.h/m
BNRItem+CoreDataClass.h
包括BNRItem+CoreDataProperties.h
,BNRItem+CoreDataProperties.h
包括BNRItem.h
(不存在)。我假设我需要创建BNRItem.h
,但我不知道要将哪个文件导入BNRItem.h
,因为BNRItem+CoreDataProperties.h
或BNRItem+CoreDataClass.h
似乎会创建一个循环包含循环。
在 Xcode 10 中,我应该在哪个文件中为 CoreData 生成的 Objective-C 类添加实例方法?
【问题讨论】:
【参考方案1】:惯例是在.h
文件中使用@class
,在.m
文件中使用#import
,除非#import
在.h
文件中是必需的。后者在引用超类或协议时出现。
这个想法是为了加快重新编译。如果ClassA.h
导入ClassB.m
,而您在开发过程中只更改ClassB.m
,那么由于ClassA.m
导入ClassA.h
导入ClassB.m
,ClassA.m
将需要在下一次构建期间重新编译,即使它没有改变。
当然,所有这些都在 Swift 中消失了 :)
【讨论】:
【参考方案2】:这可能不是真正的答案,但我通过将 CodeGen 更改为 Manual/None 并编辑它生成的文件来解决此问题。
【讨论】:
【参考方案3】:将代码生成选项留给Class Definition
并为您的实体创建一个扩展(Objective-C 中的一个类别)怎么样?
【讨论】:
【参考方案4】:引入了#import
语句来解决#include
创建的循环依赖关系。
所以如果你使用#import
没关系,但如果你仍然担心你也可以使用@class
前向声明
【讨论】:
【参考方案5】:这一直是我的挣扎,但刚才我遇到了this Apple article。
第二种方式,是您尝试使用的方式。意外的步骤是将属性文件移动到垃圾箱。实际上,<class>+CoreDataClass
文件似乎必须重命名为 <class>.h
和 .m
。之后,您可以使用这些文件来扩展您的类并继续生成属性文件。
所以创建托管对象类的步骤是:
在数据模型检查器中为您的实体选择类别/扩展。 使用Editor > Create NSManagedObject Subclass...
菜单生成您的课程。
移动创建的<class>+CoreDataProperties.h
和.m
文件。
附加步骤:如前所述重命名数据类文件。
【讨论】:
以上是关于向 Xcode 10 Core Data 生成的文件添加方法的主要内容,如果未能解决你的问题,请参考以下文章
我可以在 Xcode 4 中删除 Core Data 动态生成的方法吗?
使用 Core Data 获取生成“无法识别的选择器错误”?