在我的目标c代码中,我尝试通过
设置超类属性super.aProperty = something;
但是我得到了这个错误“在'MySuperClass'类型的对象上找不到”属性'aProperty'。
在我的MySuperClass.m中,我有
@interface MySuperClass ()
@property (strong, nonatomic) SomeProperty *aProperty;
@end
你能否告诉我为什么'super.aProperty =某事'不起作用?
谢谢。
更新
我尝试移动这一行“@property(强,非原子)SomeProperty * aProperty;”到.h。
但我收到的错误是'未知类型名称'SomeProperty'你的意思是'SomeOtherProperty'?我的.h文件中有#include SomeProperty.h。
答案 0 :(得分:2)
因为编译子类时编译器看不到它。您拥有.m文件中的属性而不是.h文件,这意味着它是一个私有属性,只能在同一个.m文件中显示。
如果您需要公共属性,则需要将其放在.h文件中,并在需要访问该属性时包含该文件。
大多数情况下,您可以将其称为self.aProperty = something;
,除非您已覆盖它并且不想在子类中调用该实现(以避免无限递归)
答案 1 :(得分:0)
希望这会对你有所帮助
在类扩展(https://stackoverflow.com/a/24568948/3767017)中声明变量,在类扩展中,变量只能私有访问。如果需要访问其他类中的变量,则必须将其作为公共变量或保护。
@interface yourClass : parentClass {
SomeProperty *aProperty; // protected by default
@protected
SomeProperty *aProperty;
}
@property (strong, nonatomic) SomeProperty *aProperty;//public