目标c中的自定义setter

时间:2012-03-12 06:24:53

标签: iphone objective-c ios5 getter-setter

我正在尝试声明NSDictionary的自定义getter,但我无法让它工作。

到目前为止,我已经声明了@property和合成语法。

@property (nonatomic, strong) NSDictionary *variableDictionary;
@synthesize variableDictionary = _variableDictionary;

我想为字典声明一个setter,为它提供一些标准值。

-(void)setVariableDictionary:(NSDictionary *)variableDictionary {
    NSNumber *x = [NSNumber numberWithDouble:20];
    NSNumber *a = [NSNumber numberWithDouble:10];
    NSNumber *b = [NSNumber numberWithDouble:5];
    NSDictionary *_variableDictionary = [[NSDictionary alloc] initWithObjectsAndKeys:a, @"a", b, @"b", x, @"x", nil];
}

当我使用上面的方法时,我得到一个警告未使用的变量,如果我从NSDictionary变量定义中删除下划线,我得到一个错误,说'重新定义变量字典'。

我不确定这样做的正确方法。

5 个答案:

答案 0 :(得分:1)

_variableDictionary已经宣布。

替换

NSDictionary *_variableDictionary = [[NSDictionary alloc]
initWithObjectsAndKeys:a, @"a", b, @"b", x, @"x", nil];

_variableDictionary = [[NSDictionary alloc] initWithObjectsAndKeys:a, @"a", b, @"b", x, @"x", nil];

答案 1 :(得分:1)

在自定义setVarableDictionary: setter方法中,当你写:

NSDictionary *_variableDictionary = _variableDictionary = [[NSDictionary alloc] initWithObjectsAndKeys:a, @"a", b, @"b", x, @"x", nil];

这将声明并设置仅在函数范围内的新局部变量的值。您得到的警告消息是因为该变量在超出范围之前未使用。

您应该只设置属性所在的ivar的值,而不是创建局部变量,如下所示:

_variableDictionary = [NSDictionary dictionaryWithObjectsAndKeys:a, @"a", b, @"b", x, @"x", nil];

答案 2 :(得分:1)

首先,设置器实现并没有任何意义,因为它永远不会改变值(它的唯一功能是初始化)。尽管如此(假设这会改变),如果你想测试你的setter中的值,你可以让它看起来像这样

-(void)setVariableDictionary:(NSDictionary *)variableDictionary {
    NSNumber *x = [NSNumber numberWithDouble:20];
    NSNumber *a = [NSNumber numberWithDouble:10];
    NSNumber *b = [NSNumber numberWithDouble:5];
    _variableDictionary = [[NSDictionary alloc] initWithObjectsAndKeys:a, @"a", b, @"b", x, @"x", nil];
    NSLog(@"%@", _variableDictionary);
}

这将告诉您该方法是否被调用。如果不是那么你就不会得到NSLog消息。 这对我来说很有效,如果它不在你的身上,那么还会有其他事情发生。

答案 3 :(得分:0)

尝试这样做,设置你的属性,如下所述:

@property (nonatomic, strong,setter = setTheVariableDictionary:) NSDictionary *variableDictionary;

删除

-(void)setVariableDictionary:(NSDictionary *)variableDictionary

并写为

-(void)setVariableDictionary:(NSDictionary *)thevariableDictionary

希望这会对你有所帮助。

答案 4 :(得分:0)

如果我理解你的问题。这可能会有所帮助

-(void)setVariableDictionary:(NSDictionary *)newVariableDictionary
{
    if (variableDictionary != newVariableDictionary) {
       variableDictionary = newVariableDictionary;
    }
}

代码。

-(void)setVariableDictionary:(NSDictionary *)variableDictionary {

正常情况下重新声明参数时会出现错误。 (NSDictionary *)variableDictionary