2016-02-12 102 views
0

我只是试图根据某些逻辑将布尔值设置为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条件,它并正确反映,但重置一旦它开始。这是因为我没有为我的属性使用指针?

+0

什么是'self.customLabel'?它是否被设置为“@”Stone Manip“'? – Hamish

+0

自定义标签始终是交换机设置时提供的文本。它保持不变,我可以通过我的调试器和控制台验证它是否总是进入日志。日志总是告诉我0。 – wowzuzz

+0

是的,有两个开关叫。一个是“Stone Manip”和另一个是“Cysto/Stent”。这两个文本可以根据调用哪个开关而不同。 – wowzuzz

回答

0

它看起来像你设置/更改应用程序中某处的self.cystSwitch属性,如果代码不适合你。

0

你的bug很可能是你没有保存数据,你有没有考虑将信息保存到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 

为一个char,它的价值就不会被限制TRUEFALSE。另一个值会发生什么?

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