2014-12-04 63 views
0

在我的目標C代碼,我試圖通過如何在目標c中設置超類的屬性?

super.aProperty = something; 

設置超類屬性,但我得到這個錯誤「屬性‘aProperty’上類型爲‘MySuperClass’對象未找到。

在我MySuperClass.m,我有

@interface MySuperClass() 

@property (strong, nonatomic) SomeProperty *aProperty; 

@end 

能否請你告訴我,爲什麼 'super.aProperty =什麼' 不工作?

謝謝。

更新:

我試圖推動這一行 「@property(強,非原子)SomeProperty * aProperty;」 來的.h。

但我得到錯誤說'未知的類型名'SomeProperty'你的意思是'SomeOtherProperty'?我在我的.h文件中包含#Project SomeProperty.h。

+0

查看我的回答 – 2015-05-05 07:51:56

回答

2

因爲在編譯子類時編譯器不可見。您有.m文件中的屬性而不是.h文件,這意味着它是一個只在同一個.m文件中可見的私有屬性。

如果您需要公共屬性,則需要將其放入.h文件並在需要訪問屬性時包含該文件。

而且大多數的時候,你可以這樣調用它self.aProperty = something;除非你有覆蓋它,不想叫兒童類的實現(以避免無限遞歸)

+0

要添加,還需要注意的是,該屬性是在類別中定義的,而不是在類定義中定義的。語法'@interface MySuperClass()'通常用作私有類別來添加只在該特定類中需要的功能。換句話說,該屬性在當前定義中並不屬於超類。 – 2014-12-04 05:18:23

+3

@BrandonBuck它實際上被稱爲未命名類別的擴展名。 – 2014-12-04 05:20:29

+0

好吧,你去,自己學到了一些東西。 – 2014-12-04 05:21:26

0

希望這將幫助你

你聲明類擴展內部的變量(https://stackoverflow.com/a/24568948/3767017)和類擴展內部變量只能私人訪問。如果你需要訪問其他類中的變量,你必須使它成爲公共或受保護的變量。

@interface yourClass : parentClass { 
    SomeProperty *aProperty; // protected by default 

    @protected 
    SomeProperty *aProperty; 
} 

@property (strong, nonatomic) SomeProperty *aProperty;//public