Objective-C如何处理具有相同属性名的子类和超类?
在iOS 8中,NSManagedObject被赋予了一个新属性:Objective-C如何处理具有相同属性名的子类和超类?,objective-c,core-data,ios8,Objective C,Core Data,Ios8,在iOS 8中,NSManagedObject被赋予了一个新属性: @property(非原子,getter=isDeleted,只读)BOOL已删除 不幸的是,我已经在NSManagedObject的子类中使用了同名属性来将对象标记为软删除 @属性(非原子,保留)NSNumber*已删除;//CoreData模型中的布尔值 这会导致大量编译器警告: 属性“deleted”上的“getter”属性与从“NSManagedObject”继承的属性不匹配。 Objective-C如何处理具有相同属性
@property(非原子,getter=isDeleted,只读)BOOL已删除代码>
不幸的是,我已经在NSManagedObject
的子类中使用了同名属性来将对象标记为软删除
@属性(非原子,保留)NSNumber*已删除;//CoreData模型中的布尔值
这会导致大量编译器警告:
属性“deleted”上的“getter”属性与从“NSManagedObject”继承的属性不匹配。
Objective-C如何处理具有相同属性的超类和子类?很明显,我计划全面重命名这个属性,但是这个应用程序已经有多个版本了,我很好奇它的含义 @property
访问器只是常规方法,因此它们的处理方式与其他方法完全相同。在这种情况下,我相信您会幸运,因为框架(NSManagedObject
)getter是-isDeleted
,而不是-deleted
。因为您的子类实现了-deleted
,所以从技术上讲与getter没有冲突
现在,真正的问题是,如果NSManagedObject
在内部实现了相应的-setDeleted:
setter,那么将调用该方法的子类实现,而不是NSManagedObject
的实现。使用-instancessrespondtoselector:
快速检查似乎发现NSManagedObject
实际上并没有实现-setDeleted:
(无论如何,在OS X上)。所以,你可能没事
我不清楚这样的冲突对你的应用程序的实际影响(假设你不幸运,如上所述),也不知道你的应用程序到底在做什么或为什么。值得一提的是,NSManagedObject上的-isDeleted
方法一点也不新鲜。它只是在iOS 8中升级为声明的@属性
(大概是为了简化Swift互操作性)。删除自己的属性可能一直都是个坏主意