被修改
我的应用程序中有一个声音,它在应用程序启动时开始播放。我还有两种播放和停止声音的方法:
-(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。
我的错误在哪里?
答案 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"];