为布尔属性自动生成NSManagedObject的子类会导致警告

时间:2014-09-09 12:51:07

标签: ios objective-c xcode core-data

在CoreData Model中,我有一个名为TestEntity的实体。该实体有一个名为'deleted'的属性,其类型为boolean。

如果我使用Xcode为这个实体生成一个自动NSManagedObject子类,生成的类头看起来像这样:

@interface TestEntity : NSManagedObject

@property (nonatomic, retain) NSNumber * deleted;

@end

我理解为什么NSNumber用于布尔属性。这与以前没有变化。问题是它现在向我显示了2个警告:

  1. 属性'deleted'的getter属性与从'NSManagedObject'继承的属性不匹配。
  2. 属性类型'NSNumber *'与从'NSManagedObject'继承的类型'BOOL'(又名'bool')不兼容。
  3. 我不想使用原始类型。任何想法如何摆脱这些警告? 这可能是我正在使用的Xcode 6 beta 7(iOS 8 beta 5)的错误。已提交错误报告,因为使用Xcode自动生成的类在任何情况下都不会导致编译器警告。

2 个答案:

答案 0 :(得分:8)

您设法使用名称与NSManagedObject的现有方法冲突的属性。

解决方案:更改属性的名称。不要将其称为“已删除”,而是将其称为其他内容

答案 1 :(得分:2)

我去了NSManagetObject头文件,似乎Apple正在以这种方式使用它。

// state - methods can be used through KVC, for example for enabling/disabling widgets based on the state of the object
@property (nonatomic, getter=isInserted, readonly) BOOL inserted;
@property (nonatomic, getter=isUpdated, readonly) BOOL updated;
@property (nonatomic, getter=isDeleted, readonly) BOOL deleted;

尝试更改实体的属性名称,我的猜测是它不会成为轻量级核心数据迁移案例。请务必在提交代码前进行检查。

我不知道Apple是否只是这样做但我在iOS 7中没有收到警告。我们希望这是来自Apple的一个信号让我们知道他们正在修复所有问题核心数据问题:)