本质上,以下是我在NSTextFieldCell的子类中的代码:
- (void)setStringValue:(NSString *)aString {
[super setStringValue:aString];
[self doSomething];
}
- (void)doSomething {
NSLog(@"%@", [self stringValue]);
}本质上,我试图让我的子类知道字符串值发生了变化,并且当值发生变化时,我希望NSCell的子类能够对这个新值执行某些操作(使用-attributedStringValue会更好,因为我想缓存它以供特殊绘制使用)。问题是,由于某种原因,调用-(NSString *)stringValue会以某种方式导致对-(空)setStringValue的调用,最终会变成...
...an无限循环。有没有人能给我一些启发--以及可能的变通方法?
发布于 2012-04-09 07:00:49
可能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];
}https://stackoverflow.com/questions/10066976
复制相似问题