我正在尝试声明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变量定义中删除下划线,我得到一个错误,说'重新定义变量字典'。
我不确定这样做的正确方法。
答案 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