在nsuserdefaults中保存bool

时间:2011-04-07 20:52:38

标签: objective-c ios4 audio nsuserdefaults boolean

当我的应用程序启动音乐播放时:

-(void)playBgMusic {

NSString *path = [[NSBundle mainBundle] pathForResource:@"bgmusic" ofType:@"aif"];
theAudio = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL];
theAudio.delegate = self;
[theAudio play];    }

但如果再次按下按钮,他应该可以通过按下按钮关闭音乐,音乐应该再次打开。我有:

-(IBAction)check {


if (isquiet == NO) {

    [theAudio stop];

    isquiet = YES;

     defaults = [NSUserDefaults standardUserDefaults];
    [defaults setBool:YES forKey:@"stringKey"];


}

else {

    [self playBgMusic];

    isquiet = NO;

    defaults = [NSUserDefaults standardUserDefaults];
    [defaults setBool:NO forKey:@"stringKey"]; } }

我想我没有得到它。现在它可以在我的第一个ViewController中工作,我可以打开和关闭音乐但是当我在播放音乐时转到另一个viewController,然后再返回并按下按钮,音乐不会停止,当我按下它多次音乐是第二次播放并重叠。

还有什么问题?

4 个答案:

答案 0 :(得分:35)

无需将其包装在NSNumber中,有一些方便的方法:

要设置BOOL,请使用:

[userDefaults setBool:YESorNO forKey:@"yourKey"];

要访问它,请使用:

[userDefaults boolForKey:@"yourKey"];

[编辑以回答您的其他问题]

不确定您使用NSUserDefaults的原因 - 您似乎没有必要实现的目标?这就是我要为可以开始/停止音乐的按钮做的事情:

-(IBAction)check 
{
    if (isQuiet)
    {
        // Play music
        // Change the button to indicate it is playing...
    } else 
    {
        // Stop music
        // Change the button to indicate it has stopped...
    }
    // Set your isQuiet to be the opposite of what it was when the button was clicked
    isQuiet = !isQuiet;
}

答案 1 :(得分:5)

将您的BOOL值包装到NSNumber对象并将其添加到NSUserDefault:

NSUserDefaults *boolUserDefaults = [NSUserDefaults standardUserDefaults];
[boolUserDefaults setObject:[NSNumber numberWithBool:isquiet] 
                     forKey:@"stringKey"];

稍后,您可以使用-boolForKey:

中的NSUserDefaults函数将该值检索为纯BOOL

答案 2 :(得分:0)

保存:

[boolUserDefaults setObject:[NSNUmber numberWithBool:isQuiet] forKey:@"stringKey"];

当您阅读它时,请将其作为NSNumber读取,然后执行:

BOOL savedIsQuiet = [theNumberYouSaved boolValue];

答案 3 :(得分:0)

快捷键:

要保存布尔值:

UserDefaults.standard.set(true, forKey: "storageKey")

要检索布尔值:

let boolValue = UserDefaults.standard.bool(forKey: "storageKey")