[英]Setter methods not being called
我创建了一个setter模块,当将任何内容存储到_textColor变量中但无法正常工作时应调用该模块,如果我删除了新的setter模块并让合成器创建了默认模块,则默认模块将起作用。 问题是当我有一个名为“ fillColor”的变量时,我最终可以访问另一个名为setFillColor的模块:
我已经省略了无关紧要的大量代码。在我的头文件中,我具有以下内容:
@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;
}
就像这样:
-(void)setTextColor:(NSColor *)textColor{
if (_textColor != textColor) {
[_textColor release];
_textColor = [textColor retain];
}
这个怎么样:
@interface ICADrawingObject : NSObject {
NSColor *_textColor;
}
@property (nonatomic, retain, setter=setObjectTextColor:) NSColor *textColor;
@end
@implementation ICADrawingObject
@synthesize textColor = _textColor;
-(void)setObjectTextColor:(NSColor *)aColor{
NSLog(@"Text Old Color: %@",_textColor);
NSLog(@"Text New Color: %@",aColor);
if( _textColor != aColor ) {
[_textColor release];
_textColor = [aColor retain];
}
_textColor = aColor;
}
@end
此后,如果我们这样做:
ICADrawingObject *obj = [ICADrawingObject new];
obj.textColor = [NSColor blackColor];
那么这应该打印到控制台上,作为正在调用自定义设置程序的证据:
2012-09-19 08:37:43.605 test323[67540:303] Text Old Color: (null)
2012-09-19 08:37:43.606 test323[67540:303] Text New Color: NSCalibratedWhiteColorSpace 0 1
顺便说一句,在ivars上不需要@private
指定。 您现在可以通过在实现中声明ivars来控制可见性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.