我創建了一個setter模塊,當任何內容被存儲到_textColor變量中時它將被調用,但它不工作,如果我刪除新的setter模塊並讓合成器創建默認的模塊,默認的將起作用。這個問題是,當我有一個名爲'fillColor'的變量時,我最終得到了一個名爲setFillColor的不同模塊:Setter方法不被調用
我省略了大部分無關代碼 在我的頭文件中,以下:
@interface ICADrawingObject : NSObject <NSCoding> {
@private
NSColor *_textColor;
}
@property (nonatomic, retain, readwrite, setter=setObjectTextColor:) NSColor* textColor;
在實現我:
@synthesize textColor = _textColor;
-(void)setObjectTextColor:(NSColor *)textColor{
NSLog(@"Text Old Color: %@",self.textColor);
NSLog(@"Text New Color: %@",textColor);
_textColor = textColor;
}
只是好奇,你爲什麼改變二傳手的名字?這是非常罕見的,可能會破壞部分KVC(我還沒有測試過,因爲這是一件不尋常的事情)。有時候我們改變getter的名字(專爲布爾值),但幾乎不會是setter的名字。 –
還請注意,如果您直接訪問ivars,則無法獲取要運行的方法。所以當你說「什麼時候存儲到'_textColor'變量的時候,」這是不可能的。你應該到處使用訪問器(除了init和dealloc)。如果純粹是爲了調試,您可以使用LLDB「觀察點」來觀察內存何時發生變化。但是,如果在沒有訪問者的情況下更改ivar,則不會導致代碼運行。 –
Tbh,我想嘗試讓setter工作,部分是爲了節省我的工作,同時也是由於我的同事在整個代碼中使用變量名會導致很多問題。仔細查看代碼,我發現由於綁定了xib文件中的變量而出現了很多問題,我認爲最好的做法是重命名變量並保持一切安全 –