NSCell -stringValue调用-setStringValue?

时间:2012-04-08 22:10:01

标签: objective-c cocoa nstextfield

实质上,这是我在NSTextFieldCell的子类中的代码:

- (void)setStringValue:(NSString *)aString {
    [super setStringValue:aString];
    [self doSomething];
}

- (void)doSomething {
    NSLog(@"%@", [self stringValue]);
}

本质上,我试图让我的子类通知字符串值发生变化,当值发生变化时,我希望NSCell的子类能够对该新值做一些事情(使用-attributedStringValue会更好,因为我想缓存它用于特殊绘图)。问题是,出于某种原因,调用 - (NSString *)stringValue会以某种方式导致调用 - (void)setStringValue,最终变为......

......无限循环。有人可以启发我 - 以及可能的解决方法吗?

1 个答案:

答案 0 :(得分:1)

可能stringValue正在进行一些延迟初始化。如果它检测到它没有stringValue但可以从其他东西(也许是attributedStringValue?)派生出值,那么它派生值,调用[self setStringValue:derivedValue],然后返回值。

但是,这确实让生活变得棘手。试试这样的事情?

@implementation MyCell ()
{
    BOOL gettingStringValue;
}
@end

- (NSString*)stringValue {
    gettingStringValue = YES;
    NSString* stringValue = [super stringValue];
    gettingStringValue = NO;
    return stringValue; 
}

- (void)setStringValue:(NSString *)aString {
    [super setStringValue:aString];
    if (!gettingStringValue)
        [self doSomething];
}