我只是试图根据某些逻辑将布尔值设置为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 :(得分: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
作为字符,其值不会限制为TRUE
和FALSE
。另一个值会发生什么?
BOOL b = 42;
if (b)
{
// true
}
if (b != YES)
{
// also true
}