首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSCell -stringValue调用-setStringValue?

NSCell -stringValue调用-setStringValue?
EN

Stack Overflow用户
提问于 2012-04-09 06:10:01
回答 1查看 528关注 0票数 0

本质上,以下是我在NSTextFieldCell的子类中的代码:

代码语言:javascript
复制
- (void)setStringValue:(NSString *)aString {
    [super setStringValue:aString];
    [self doSomething];
}

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

本质上,我试图让我的子类知道字符串值发生了变化,并且当值发生变化时,我希望NSCell的子类能够对这个新值执行某些操作(使用-attributedStringValue会更好,因为我想缓存它以供特殊绘制使用)。问题是,由于某种原因,调用-(NSString *)stringValue会以某种方式导致对-(空)setStringValue的调用,最终会变成...

...an无限循环。有没有人能给我一些启发--以及可能的变通方法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-09 07:00:49

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

然而,这确实让生活变得棘手。试试这样的东西?

代码语言:javascript
复制
@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];
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10066976

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档