在iOS 8 NSManagedObject
中获得了一个新属性:
@property (nonatomic, getter=isDeleted, readonly) BOOL deleted;
不幸的是,我已经在NSManagedObject
的子类中使用了同名的属性来将对象标记为软删除。
@property (nonatomic, retain) NSNumber *deleted; // BOOL in CoreData model
这导致大量编译器警告:
'getter' attribute on property 'deleted' does not match the property inherited from 'NSManagedObject'
Objective-C如何处理具有相同属性的超类和子类?我显然计划全面重命名这个属性,但是这个应用程序已经存在多个版本,我很好奇它的含义。
答案 0 :(得分:1)
@property
访问器只是常规方法,因此它们的处理方式与其他方法完全相同。在这种情况下,我相信你很幸运,因为框架(NSManagedObject
)getter是-isDeleted
而不是-deleted
。由于您的子类实现了-deleted
,因此技术上与getter没有冲突。
现在,真正的问题是,如果NSManagedObject
在内部实现相应的-setDeleted:
setter,那么将调用该方法的子类实现,而不是NSManagedObject
的实现。使用-instancesRespondToSelector:
快速检查似乎表明NSManagedObject
实际上没有实现-setDeleted:
(无论如何,在OS X上)。所以,你可能没事。
这样的冲突对您的应用程序的实际影响(假设您如上所述不幸运的情况)我不清楚,不知道您的应用程序正在做什么或为什么。对于它的价值,NSManagedObject上的-isDeleted
方法根本不是新的。它被简单地提升为iOS 8中声明的@property
(可能是为了简化Swift的互操作性)。拥有自己的deleted
属性......