为什么我的setter方法没有被调用?

时间:2014-08-08 21:19:31

标签: ios objective-c

我在.h档案中有这个:@property (nonatomic, strong) NSMutableDictionary *valoresTotaisNutricao;

然后,我像这样覆盖了setter和getter:

-(void)setValoresTotaisNutricao:(NSMutableDictionary *)valoresTotaisNutricao
{
    NSLog(@"setter");
    [self oDicionarioEdeHoje];
    if ([self oDicionarioEdeHoje] == NO) {
        // Data não está atualizada, apagar dicionário e setar nova.
        [_valoresTotaisNutricao removeAllObjects];
        [_valoresTotaisNutricao setObject:[self pegarFinalDoDia] forKey:@"data"];
    }
    _valoresTotaisNutricao = valoresTotaisNutricao;
}

-(NSMutableDictionary *)valoresTotaisNutricao
{
    NSLog(@"getter");
    if (!_valoresTotaisNutricao) {
        _valoresTotaisNutricao = [[NSMutableDictionary alloc] initWithObjectsAndKeys:[self pegarFinalDoDia], @"data", nil];
    }
    return _valoresTotaisNutricao;
}

我使用@synthesize valoresTotaisNutricao = _valoresTotaisNutricao;

我的getter有效,但我的setter永远不会被调用。我试图在@property声明中明确声明方法名称,但它也不起作用。

更新:

我尝试从另一个类的NSMutableDictionary添加一些值。

[singleton.valoresTotaisNutricao setObject:[NSNumber numberWithInt:222] forKey:@"teste"];

1 个答案:

答案 0 :(得分:4)

setObject:forKey:不会调用您的setter方法。

singleton.valoresTotaisNutricao会调用你的getter方法,你懒得加载你的属性,然后setObject:[NSNumber numberWithInt:222] forKey:@"teste"将为该字典上的@"teste"键设置一个值,但无处可去该代码会调用你的setter方法。

你需要使用这个:

singleton.valoresTotaisNutricao = <some mutable dictionary object>;

或者这个:

[singleton setValoresTotaisNutricao:<some mutable dictionary object>];

...调用你的setter方法。