本质上,这是我在NSTextFieldCell子类中的代码:
- (void)setStringValue:(NSString *)aString {
[super setStringValue:aString];
[self doSomething];
}
- (void)doSomething {
NSLog(@"%@", [self stringValue]);
}
从本质上讲,我试图让我的子类收到有关字符串值更改的通知,并且当值更改时,我希望NSCell的子类能够使用该新值进行处理(使用-attributedStringValue会更好。 ,因为我想将其缓存以用于特殊绘图)。由于某种原因,问题是调用-(NSString *)stringValue导致对-(void)setStringValue的调用最终导致...
无限循环有人可以启发我吗?还有可能的解决方法?
最佳答案
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];
}