2014-09-04 73 views
0

我無法理解如何用類擴展中寫入的readwrite方法覆蓋只讀方法。我在頭文件中有一個只讀方法,而在我的實現文件中,我嘗試使用類擴展來覆蓋此方法。我剛纔在這個線程中詢問了這個問題,我在這裏包含了我所指的代碼:Having trouble with class extension in Objective C, mac OS. Getting error 'NSInvalidArgumentException', no visible @interface declares the selector目標C類擴展 - 如何用readwrite方法覆蓋只讀?

這裏是:Objective-C Succinctly: Categories and Extensions是我正在使用的另一個源,它讓我相信我應該能夠覆蓋聲明的只讀屬性在我的頭文件中使用類擴展名的readwrite屬性。如果我錯了,請糾正我,我是一個完全新手,試圖找出基本知識。

+0

呃,什麼是「讀寫方法」? – 2014-09-05 00:01:27

+0

對不起我的意思是財產,readwrite意味着有一個默認的getter和setter。 – mepstein1218 2014-09-05 14:15:59

回答

0

訣竅是你不要覆蓋。 您重寫。 您可以編寫一個只讀方法,添加所需的任何處理,然後調用super並返回結果或提供自定義結果。 (參考您自己的伊娃或財產或提供計算結果)

確定您的編輯完成後。

方法略有不同。 你在談論屬性。 Objective-C中的一個屬性基本上是聲明一個ivar或實例變量,它將(通常)具有標準的setter和getter方法。那些設置或獲得伊娃的價值。

如果在頭文件中有一個只讀屬性,或者從超類繼承(在頭文件中有效),那麼是的,通常的做法是將該屬性重新聲明爲在.m或實現文件中讀寫。 您添加一個類擴展部分。 類擴展基本上是類中的一個未命名的類。

例子。

In .h 

@interface Cat : NSObject <> 
@property (readonly) NSInteger countOfCatTails; 
@end 

In .m 
@interface Cat() 
@property NSInteger countOfCatTails; 
@end 
+0

對不起,我很難理解你在說什麼,我不習慣很多編碼術語。 「增加任何處理」是什麼意思? 當你說「返回結果」時,你指的是什麼結果? 最後,你用括號指的是什麼? – mepstein1218 2014-09-05 14:28:09

+0

這實際上正是我所擁有的,但是我得到的錯誤是「XYZPerson沒有可見的@interface」聲明選擇器「setHeight」。 – mepstein1218 2014-09-05 17:45:37

+0

此時您需要發佈您的代碼。 – uchuugaka 2014-09-05 17:57:50