Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.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
Ios 无法访问布尔值的属性_Ios_Objective C - Fatal编程技术网

Ios 无法访问布尔值的属性

Ios 无法访问布尔值的属性,ios,objective-c,Ios,Objective C,我只是试图根据某些逻辑将布尔值设置为true 这是我的密码 我的两个属性已设置 @property (nonatomic) BOOL stoneSwitch; @property (nonatomic) BOOL cystSwitch; 下面是我在故事板的开关上设置的一个动作 - (IBAction)switcherAction:(id)sender { if (self.customSwitcher.isOn) { if ([self.customLabel.text

我只是试图根据某些逻辑将布尔值设置为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;

}
我在我的计算机上重新登录,但它始终保持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];

}

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

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

您的错误可能是您没有持久化数据,您是否考虑过将信息保存到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
}

什么是
self.customLabel
?它的
text
是否设置过除
@“Stone Manip”
之外的其他设置?当它到达switcherAction时,您的开关必须始终处于
关闭状态,所以只需返回
0
。@wowzuzz:嘿,别难过,大多数人可能都经历过它。。。我知道我花了一点时间才明白-这些东西有时会让人麻木。谢谢你。我很感激。通过这些天的学习是一个缓慢但有益的过程。旋转两种不同类型的广告横幅。。。我会尝试回答中的示例,并在if/else中放置一个
NSLog()
,然后运行几次,看看它是如何工作的。