【问题标题】:Adding a method to an Xcode 10 Core Data generated file向 Xcode 10 Core Data 生成的文件添加方法
【发布时间】: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.hBNRItem+CoreDataProperties.h 包括BNRItem.h(不存在)。我假设我需要创建BNRItem.h,但我不知道要将哪个文件导入BNRItem.h,因为BNRItem+CoreDataProperties.hBNRItem+CoreDataClass.h 似乎会创建一个循环包含循环。

在 Xcode 10 中,我应该在哪个文件中为 CoreData 生成的 Objective-C 类添加实例方法?

【问题讨论】:

    标签: ios objective-c core-data


    【解决方案1】:

    惯例是在.h 文件中使用@class,在.m 文件中使用#import,除非#import.h 文件中是必需的。后者在引用超类或协议时出现。

    这个想法是为了加快重新编译。如果ClassA.h 导入ClassB.m,而您在开发过程中只更改ClassB.m,那么由于ClassA.m 导入ClassA.h 导入ClassB.mClassA.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 文件。
            • 附加步骤:如前所述重命名数据类文件。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2017-02-04
              • 1970-01-01
              • 2011-09-01
              • 2019-03-27
              • 1970-01-01
              • 2016-09-04
              • 1970-01-01
              相关资源
              最近更新 更多