繁体   English   中英

Objective-C:if语句仅在第二次尝试后才运行(iOS)

[英]Objective-C: If statement only runs after second attempt (iOS)

我创建了一个if语句,用于检查布尔值是否设置为true或false

-(void) buttonClicked {

    if (sortedList) {       

        // code

        sortedList = NO;
        [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"sorted"];
    }

    else {

        // code

        sortedList = YES;
        [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"sorted"];
    }
}

布尔值加载到viewWillAppear

    sortedList = [[NSUserDefaults standardUserDefaults] boolForKey:@"sorted"];

问题是,当我单击调用buttonClicked的按钮时,什么也没有发生。 当我第二次单击它时,正确的代码将按预期执行(运行ifelse正确取决于它的设置方式)。 敲击按钮的第三,第四等时间,代码将按预期执行。 但是,当我在显示另一个视图后返回该视图时,问题再次出现,仅对第一次单击没有任何操作。

我已经使用日志检查了是否在viewWillAppear设置了布尔值,但是它似乎设置正确(使用我希望它保持的值)。

有人知道我在这里缺少什么吗?

编辑: buttonClicked方法被调用如下

[listButton addTarget:self action:@selector(buttonClicked) forControlEvents:UIControlEventTouchUpInside];

编辑2-修复:我已经将if条件更改为(!sortedList)并在下面的@Claudio Redi之类的两个语句中切换了布尔值的分配。 这为我解决了。

你需要打电话

[[NSUserDefaults standardUserDefaults] synchronize];

在使用以下方式存储值之后保留值

[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"sorted"];
-(void) buttonClicked {

    if (sortedList) {       

        // code

        sortedList = NO;
        [[NSUserDefaults standardUserDefaults] setValue:[NSString stringWithFormat:@"sorted"] forKey:@"sorted"];
    }

    else {

        // code

        sortedList = YES;
        [[NSUserDefaults standardUserDefaults] setValue:[NSString stringWithFormat:@"notsorted"] forKey:@"sorted"];
    }
}

//sortedList = [[NSUserDefaults standardUserDefaults] boolForKey:@"sorted"];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM