Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 目标c中的自定义设置程序_Iphone_Objective C_Ios5_Getter Setter - Fatal编程技术网

Iphone 目标c中的自定义设置程序

Iphone 目标c中的自定义设置程序,iphone,objective-c,ios5,getter-setter,Iphone,Objective C,Ios5,Getter Setter,我正试图声明NSDictionary的自定义getter,但无法使其正常工作 到目前为止,我已经声明了@property和synthesis语法 @property (nonatomic, strong) NSDictionary *variableDictionary; @synthesize variableDictionary = _variableDictionary; 我想为字典声明一个setter,为它提供一些标准值 -(void)setVariableDictionary:(NS

我正试图声明NSDictionary的自定义getter,但无法使其正常工作

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

@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变量定义中删除下划线,我会得到一个错误,说“变量字典的重新定义”


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

\u variableDictionary已经声明

替换

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


_variableDictionary已声明

替换

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


试着这样做,如下所述设置属性:

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

-(void)setVariableDictionary:(NSDictionary*)variableDictionary

写的是

-(void)setVariableDictionary:(NSDictionary*)变量字典


希望这对您有所帮助。

试着这样做,设置您的属性,如下所述:

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

-(void)setVariableDictionary:(NSDictionary*)variableDictionary

写的是

-(void)setVariableDictionary:(NSDictionary*)变量字典


希望这对你有帮助。

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

-(void)setVariableDictionary:(NSDictionary *)newVariableDictionary
{
    if (variableDictionary != newVariableDictionary) {
       variableDictionary = newVariableDictionary;
    }
}
在你的代码中

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

当您重新声明参数时,它会给您一个错误,这是正常的。(NSDictionary*)变量字典

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

-(void)setVariableDictionary:(NSDictionary *)newVariableDictionary
{
    if (variableDictionary != newVariableDictionary) {
       variableDictionary = newVariableDictionary;
    }
}
在你的代码中

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

当您重新声明参数时,它会给您一个错误,这是正常的。(NSDictionary*)variableDictionary

在您的自定义
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];

在自定义
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];

首先,setter实现没有任何意义,因为它永远不会更改值(它唯一的功能是初始化)。尽管如此(假设这会发生变化),如果您想在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消息。
这在我这方面是可行的,如果它不在你这方面,那么还有其他事情要做。

首先,setter实现没有任何意义,因为它永远不会更改值(它唯一的功能是初始化)。尽管如此(假设这会发生变化),如果您想在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消息。

这对我来说是有效的,如果不是你的,那么还有其他事情发生。

当我这样做并尝试访问“\u variableDictionary”变量时,它返回null。不知道该说什么,他的答案是正确的,应该可以使用。是否确定设置后为nil,并且打印时读取的变量正确?是否需要执行任何额外操作以运行该方法?当我放入NSLog(@“dictionary的值=%@”,\u variableDictionary);方法内部没有输出。就好像我的自定义setter没有运行一样。我可以将其中的确切代码复制到另一个方法中,它工作得非常好。@A如果您看到我的答案,您应该能够解决这个问题。当我执行此操作并尝试访问“\U variableDictionary”变量时,它返回空值。不知道该说什么,他的答案是正确的,应该可以很好地处理此问题。是否确定设置后为nil,并且打印时读取的变量正确?是否需要执行任何额外操作以运行该方法?当我放入NSLog(@“dictionary的值=%@”,\u variableDictionary);方法内部没有输出。就好像我的自定义setter没有运行一样。我可以把它里面的代码复制到另一个方法中,它工作得很好。@a如果你看到我的答案,你应该能够找到答案。这不会使你的字典成为一个静态字典,因为每当你试图设置字典时,它总是有相同的值。。因为您没有使用传入词典?请有人澄清我的疑问。@Ankit Srivastava说得很好。你希望用这个存档什么?如果希望dictionary属性具有一些默认值,那么在类的init方法中调用
setVariableDictionary
并以这种方式将默认值传递给属性不是更好吗?请参阅我的答案。这可能会对你有所帮助。这不会使你的字典成为一个静态字典,因为每当你试图设置字典时,它总是有相同的值。。因为您没有使用传入词典?请有人澄清我的疑问。@Ankit Srivastava说得很好。你希望用这个存档什么?如果希望dictionary属性具有一些默认值,那么在类的init方法中调用
setVariableDictionary
并以这种方式将默认值传递给属性不是更好吗?请参阅我的答案。这可能会对您有所帮助当我这样做时,我的代码编译时没有任何警告,但每当我尝试从di访问变量时