将弃用添加到Core Data对象或属性

时间:2014-11-19 15:49:45

标签: ios objective-c core-data

我们正在对我们的核心数据模型进行重大改变。有一些我们不想再使用的属性。例如,values的以下SomeObject

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

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

@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文件的情况下向方法添加弃用?

2 个答案:

答案 0 :(得分:2)

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

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

然后现有代码应该收到警告,新代码只能通过使用带有“不赞成”字样的属性来避免警告。在里面。所以作者需要刻意粗心。

答案 1 :(得分:0)

是的,因为我与Apple就此进行了讨论,并且由于快速进行游戏而以不同的方式完成。

检查折旧的正确方法是让折旧对象将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

为零。

这是苹果开发者技术支持的直接引用我有一个冗长的词: