2012-12-11 57 views
13

工作,我已經定義的屬性...財產不能與getter和setter

@property (nonatomic, strong) NSArray *eventTypes; 

我想覆蓋getter和setter ...

我寫了這個...

- (void)setEventTypes:(NSArray *)eventTypes 
{ 
    _eventTypes = eventTypes; 

    //do some stuff here. 
} 

這工作得很好,但是當我再添加這個...

- (NSArray*)eventTypes 
{ 
    //do some stuff here. 

    return _eventTypes; 
} 

然後這兩個函數都顯示錯誤,不知道_eventTypes是什麼。

這是相同的任何方式。它適用於一個功能,但只要我添加其他功能,它們都會失敗。

有什麼我需要做的呢?看起來奇怪的是,它可以與兩個機器人都工作。

+3

你有類中定義了_eventTypes嗎?除了屬性外,還需要在頭文件中聲明變量。另外(我對此也不是100%肯定),即使你正在編寫自己的getter和setter(這樣,你的getter和setter覆蓋了合成的),你也可能需要在該屬性上使用'@ synthesize'。 – benwad

+3

'@synthesize eventTypes = _eventTypes;'會做詭計 – Alladinian

+1

從Xcode 4.5開始,您不再需要'@ synthesize'屬性。說了這麼多,我添加了@ @ synthesize',它工作了!奇怪的!謝謝 – Fogmeister

回答

2

@implementation

@synthesize eventTypes = _eventTypes; 
+1

感謝您的回答:D – Fogmeister

+0

@Fogmeister :-) –

-8

試試這個:

- (void)setEventTypes:(NSArray *)eventTypes 
{ 
    self.eventTypes = eventTypes; 

    //do some stuff here. 
} 
- (NSArray*)eventTypes 
{ 
    //do some stuff here. 

    return self.eventTypes; 
} 
+0

這將導致無限循環,永遠不要使用。 – Logan

+0

@Logan,除非你喜歡無限循環 – codrut

1

你必須@synthesize你的財產。我們使用它時,我們想創建一個自定義的getter和setter,如:

  • 讀/寫屬性與自定義getter和setter;
  • ReadOnly屬性與自定義getter;

權.m文件的@implementation後,放入:

@synthesize propertyName = _propertyName; 

這告訴編譯器,你想要得到的方法「GET」和具體的「設置」控制屬性。所以之後,你的set和get的實現將會正常工作。


額外的解釋:

self.anyString = @ 「TEXT」;完全相同[self setAnyString:@「TEXT」];這兩個都在調用方法集。如果您使用_anyString您正在直接訪問屬性,而無需通過set方法。

因此,如果我們稱自己爲。屬性裏面的set方法我們將創建一個無限循環。一旦我們重寫了方法'set'和'get',我們必須使用_而不是自我。

+0

這個問題在4年前得到了回答,你的答案與接受的答案几乎相同。 – Fogmeister

+1

我來自一個與你很相似的最新問題。我剛剛看到那個人放了一個鏈接。無論如何抱歉,如果我打擾你,我會離開我的答案,如果有人沒有看到鏈接,並在這裏讀一個小解釋。謝謝你的評論。 –

+1

夠公平的。 :) – Fogmeister