如何在目标c中设置超类的属性?

时间:2014-12-04 05:12:36

标签: objective-c

在我的目标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。

2 个答案:

答案 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