繁体   English   中英

未调用设置方法

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM