实质上,这是我在NSTextFieldCell的子类中的代码:
- (void)setStringValue:(NSString *)aString {
[super setStringValue:aString];
[self doSomething];
}
- (void)doSomething {
NSLog(@"%@", [self stringValue]);
}
本质上,我试图让我的子类通知字符串值发生变化,当值发生变化时,我希望NSCell的子类能够对该新值做一些事情(使用-attributedStringValue会更好,因为我想缓存它用于特殊绘图)。问题是,出于某种原因,调用 - (NSString *)stringValue会以某种方式导致调用 - (void)setStringValue,最终变为......
......无限循环。有人可以启发我 - 以及可能的解决方法吗?
答案 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];
}