本质上,这是我在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];
}

09-27 00:48