2016-07-22 58 views
0

我相信這個圖像是相當描述我的問題。如果我只定義如下定製getter指定只有getter產生警告b/c沒有setter,但setter不會編譯

- (UIImage *) secondaryIconImage { 
    if (_secondaryIconImage) return _secondaryIconImage; 
    return nil; 
} 

然後我得到一個錯誤:「cannot pair a synthesized setter with a user defined getter」。但是,如果我嘗試申報setter以及我的代碼將不能編譯:

- (void) setSecondaryIconImage:(UIImage *)secondaryIconImageVar { 
    _secondaryIconImage = secondaryIconImageVar; 
} 

這尤其給我的編譯時錯誤「Use of undeclared identifier _secondaryIconImage

我想也許我一旦宣佈二傳手我會合成實例變量自己,所以我嘗試添加:

@synthesize _secondaryIconImage; 

這並沒有幫助。這裏發生了什麼,我該如何解決它?

p.s.我有一個自定義的getter,因爲我最終需要做一些更有趣的事情,但我沒有看到讓這個例子複雜化的理由,因爲即使這個基本的例子給我一個問題。

+0

爲什麼你需要那個setter?這正是內置的功能之一......你的編譯錯誤是由於你沒有在你的類中定義的_secondaryIconImage變量。如果你定義了,那麼一切都應該適合你編譯。 – Putz1103

+0

@ Putz1103我想做更多的事情,只是沒有看到在代碼中包含它的理由。 – helloB

回答

2

正如它注意到的,你不能在沒有setter的情況下定義getter。 (你的getter沒有任何意義,所以我假設你的實際getter更復雜?)

如果你定義了getter和setter,那麼你將不會合成任何東西(因爲你寫了所有東西,合成),並且不會爲你定義伊娃。如果需要,你需要自己定義它。

你需要明確通過您@synthesize(感謝理查德·羅斯設置我直)請求伊娃:

@synthesize secondaryIconImage = _secondaryIconImage; 

您的代碼詢問稱爲_secondaryIconImage一個財產,所以伊娃將__secondaryIconImage

+1

第二種形式('@synthesize secondaryIconImage = _secondaryIconImage')是正確的形式。第一種形式是無操作,因爲沒有關聯名稱的「@ synthesize」不會爲了兼容性原因生成iVar。 –