在方法上使用未声明的标识符

时间:2015-10-29 04:13:32

标签: ios objective-c compiler-errors

所以我有UISwitch

UISwitch* statusBarSwitch = [[UISwitch alloc]initWithFrame:CGRectMake(254, 65, 0, 0)];
[statusBarSwitch addTarget:self action:@selector(statusBarSwitchChanged) forControlEvents:UIControlEventValueChanged];
[[self view]addSubview:statusBarSwitch];
[statusBarSwitch setOn:YES animated:NO];

这是UISwitch的方法:

-(void)statusBarSwitchChanged {
    if (statusBarSwitch.on) {
        [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide];
    }else{
        [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationSlide];
    }
}

现在,当我运行它时,我得到错误'使用未声明的标识符'在statusBarSwitchChanged

有人请帮助我,我不知道我做错了什么。

1 个答案:

答案 0 :(得分:2)

当您尝试编译时发生错误,而不是在您尝试运行时发生错误。

为什么您希望代码按原样运行? statusBarSwitch方法中没有statusBarSwitchChanged这样的变量。

在您发布的第一个代码中有一个这样的局部变量,但该变量在声明的花括号之外是不可见的。

您有两种方法可以解决此问题。

第一种是按如下方式更改选择器和方法:

UISwitch* statusBarSwitch = [[UISwitch alloc]initWithFrame:CGRectMake(254, 65, 0, 0)];
// Note the added colon to the selector name
[statusBarSwitch addTarget:self action:@selector(statusBarSwitchChanged:) forControlEvents:UIControlEventValueChanged];
[[self view]addSubview:statusBarSwitch];
[statusBarSwitch setOn:YES animated:NO];

- (void)statusBarSwitchChanged:(UISwitch *)sender {
    if (sender.on) {
        [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide];
    } else {
        [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationSlide];
    }
}

上述更改可确保将使用的开关传递给您设置的操作方法。

第二个选项是创建一个实例变量来保持对UISwitch的引用。然后,您可以从类中的任何实例方法访问该开关。