保存问题

时间:2011-04-07 22:02:19

标签: objective-c ios4 audio boolean nsuserdefaults

被修改

我的应用程序中有一个声音,它在应用程序启动时开始播放。我还有两种播放和停止声音的方法:

-(void)playBgMusic {

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


 -(void)stopMusic {

[theAudio stop];
[defaults setBool:YES forKey:@"isQuiet"]; }

现在我有了不同的viewControllers,在我的mainView中有一个停止/启动音乐的按钮(取决于播放音乐的时间)。

所以我得到了:

-(IBAction)check {

isquiet = [defaults boolForKey:@"isQuiet"];

if (isquiet == YES) {

    [self playBgMusic];

    // Change button to indicate music is playing

} 

else {

    [self stopMusic];

    // Change the button to indicate music has stopped...
}

}

现在有问题了。当应用程序启动时播放声音,之后我可以按下按钮并且声音停止但是我无法再次启动它。我已经将NSLogs放入代码中,并在按下stopButton后看到BOOL仍为NO。

我的错误在哪里?

2 个答案:

答案 0 :(得分:0)

严格来说,这不是一个答案,但希望它会让你走上正轨......

添加一些日志记录(通过NSLog(...)或添加日志记录断点)到上述代码的NO和YES情况,输出isquiet的值。然后,您可以看到在不同情况下按下按钮时调用的代码路径。

答案 1 :(得分:0)

你走在正确的轨道上,唯一缺少的是当你开始/停止播放时,实际上将bool值保存回NSUserDefaults,因此每当你点击按钮并阅读它时,你就会得到正确的值。

尝试一下,看看是否有帮助:

-(IBAction)check 
{
    BOOL isQuiet = [userDefaults boolForKey:@"isQuiet"];
    if (isQuiet)
    {
        [self playBgMusic];
        // Change button to indicate music is playing
    } else {
        [self stopBgMusic];
        // Change the button to indicate music has stopped...
    }
}

然后在您的playBgMusic方法中添加以下内容:

[userDefaults setBool:NO forKey:@"isQuiet"];

在您的spotBgMusic方法中,添加以下内容:

[userDefaults setBool:YES forKey:@"isQuiet"];