【问题标题】:Add deprecation to a Core Data object or attributes向 Core Data 对象或属性添加弃用
【发布时间】:2014-11-19 15:49:44
【问题描述】:

我们正在对我们的核心数据模型进行重大更改。有几个属性我们不想再使用了。例如,下面的values 代表SomeObject

但是,我们还不想简单地从我们的核心数据中删除values,因为我们在项目中到处都在使用它。

我想知道是否可以将deprecation 标记添加到Core Data 中的某些属性,以便我们在使用它们时会收到一些警告。

@interface SomeObject : _SomeObject
// ... 
@end

@interface _SomeObject : NSManagedObject {}
@property (nonatomic, strong) NSNumber* values;
// and a massive amount of auto-generated code by core data
@end

然后我看到了这个post about how to flag a method as deprecated in objective C。我尝试在_SomeObject.h 中添加弃用标签,例如:

@interface _SomeObject : NSManagedObject {}
@property (nonatomic, strong) NSNumber* values __attribute__((deprecated));
// and a massive amount of auto-generated code by core data
@end

它完全按照我们想要的方式工作,我们到处都有'values' is deprecated 警告。因此,我们将能够专注于所有这些警告,并在下一艘船之前修复所有这些警告。但让我感觉不太舒服的一件事是,我们正在修改 Core Data 自动生成的代码。

所以最后,我的问题是:

是否可以在不接触_SomeObject.h 文件的情况下向方法添加弃用?

【问题讨论】:

    标签: ios objective-c core-data


    【解决方案1】:

    不要直接生成编译器警告;手动修改接口文件是正确的方法。除了有人可能重新生成文件并丢失属性之外,您不会引入任何问题。

    一个可能更可取的替代方案是重命名属性,例如到valuesDeprecated。将规范名称保留为 values 以进行适当的迁移。在_SomeObject 上使用已弃用的属性values 编写一个类别,并实现它只是为了将valuesDeprecated 用作存储。

    那么现有代码应该得到警告,而新代码只能通过使用带有“已弃用”一词的属性来避免警告。所以作者需要故意粗心。

    【讨论】:

      【解决方案2】:

      是的,因为我与 Apple 讨论过这个问题,并且由于 swift 正在以不同的方式进行。

      检查折旧的正确方法是让折旧的对象作为一个类返回 NIL。

      if ([UIPrintInteractionController class]) {
          // Create an instance of the class and use it.
      } else {
          // Alternate code path to follow when the
          // class is not available.
      }
      

      [self class] 实际上是一个返回类(对象等)的类方法。您需要做的就是返回 Nil(根据 Apple Docs) init 方法也是如此。直接返回

      在没有实现 UIPrintInteractionController 的系统上,它将为 nil,发送它的类消息将返回 nil。对此进行测试将允许您编写既可以在旧系统上运行的代码,又可以在新操作系统上利用新框架和 API

      无。

      这是来自 Apple 开发者技术支持的直接引述,我曾与我长篇大论:

      【讨论】:

        猜你喜欢
        • 2023-03-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多