无法访问布尔值的属性

时间:2016-02-12 19:19:36

标签: ios objective-c

我只是试图根据某些逻辑将布尔值设置为true。

这是我的代码。

我的两个属性已设置。

@property (nonatomic) BOOL stoneSwitch;
@property (nonatomic) BOOL cystSwitch;

这是我在故事板中的开关上设置的动作

- (IBAction)switcherAction:(id)sender
{
    if (self.customSwitcher.isOn) {
        if ([self.customLabel.text isEqual:@"Stone Manip"]) {
            NSLog(@"%d",self.cystSwitch);
            if (self.cystSwitch == TRUE) {
                [self.customSwitcher setOn:YES];
                self.stoneSwitch = TRUE;
            } else {
                [self.customSwitcher setOn:NO];
            }
        } else {
            self.cystSwitch = TRUE;
        }
    }

    [self.delegate updateField:self.fieldName withBoolValue:self.customSwitcher.isOn];

}

-(void)setPlaceHolder:(NSString*)placeHolder
{
    [super setPlaceHolder:placeHolder];
    _customLabel.text = placeHolder;

}

我在我的cystSwitch布尔上方重新登录,但它始终保持为0.我在这里缺少什么?

编辑一:

- (IBAction)switcherAction:(id)sender
{
    if ([self.customLabel.text isEqual:@"Stone Manip"]) {
        NSLog(@"%d",self.cystSwitch);
        if (self.cystSwitch == TRUE) {
            [self.customSwitcher setOn:YES];
            self.stoneSwitch = TRUE;
        } else {
            [self.customSwitcher setOn:NO];
        }
    } else {
        self.cystSwitch = TRUE;
        NSLog(@"%d",self.cystSwitch);
        [self.customSwitcher setOn:YES];
    }

    [self.delegate updateField:self.fieldName withBoolValue:self.customSwitcher.isOn];

}

我注意到,如果我将self.cystSwitch记录在else条件下,它确实正确反映,但一旦重新开始就重置。这是因为我没有使用指针作为我的属性吗?

2 个答案:

答案 0 :(得分:0)

如果代码不适合您,您可能会在应用中的某处设置/更改self.cystSwitch属性。

答案 1 :(得分:0)

您的错误很可能是您没有持久保存数据,是否考虑过将信息保存到NSUserDefaults或使用像plist这样的持久性?

[NSUserDefaults.standardUserDefaults setBool:YES forKey:@"cystSwitch"]

然后再次启动应用程序时将其重新阅读

[NSUserDefaults.standardUserDefaults setBool:YES forKey:@"cystSwitch"]

<强>旁注:

您不应该使用它进行比较:

if (self.cystSwitch == TRUE)

你应该使用

if (self.cystSwitch)

问题是BOOL不是本机类型,而是typedef:

typedef signed char      BOOL;

#define YES             (BOOL)1
#define NO              (BOOL)0

作为字符,其值不会限制为TRUEFALSE。另一个值会发生什么?

BOOL b = 42;
if (b)
{
    // true
}
if (b != YES)
{
    // also true
}