2011-04-07 132 views
6

BOOL当我的应用程序启动音乐播放:在保存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]; } 

,但他应该能够通过,如果他按下按钮再次音乐应该重新开启按下一个按钮来把音乐关闭。我有:

-(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时,再次返回并按下按钮,音乐不会停止,并且当我多次按下它时音乐再次播放并重叠。

还有什么问题?

回答

32

没有必要把它包在一个NSNumber,也有一些这方面的便利方法:

要设置BOOL,使用:

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

要访问它,使用:

[userDefaults boolForKey:@"yourKey"]; 

[EDIT回答您的另一个问题]

不知道你为什么使用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; 
} 
+0

节能工程,但现在仍然有问题,我编辑了我的问题 – Leon 2011-04-07 21:19:20

+0

这是一个不同的问题,但我编辑了我的答案,看看它是否有帮助。它看起来不像你需要使用NSUserDefaults。 – Rog 2011-04-07 21:31:10

+0

我在编辑它之前解释了我的问题的必要性,抱歉删除它。我有不同的视图控制器。例如,应用程序启动,音乐播放,我去另一个视图控制器,然后再回来。在这种情况下,布尔仍然没有。所以当我此时按下按钮时,音乐会再次开始并重叠。你明白? – Leon 2011-04-07 21:39:28

5

栏中注明BOOL值的NSNumber对象,并把它添加到NSUserDefault:

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

以后你就可以检索NSUserDefaults

+0

也有一个'setBool'功能,因此在包装的NSNumber这是不必要的:) – Rog 2011-04-07 21:00:04

+0

@Rog,哎哟确实:) – Vladimir 2011-04-07 21:03:37

0

使用-boolForKey:函数值作为纯BOOL保存:

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

当你读回,读它作为一个的NSNumber然后执行:

BOOL savedIsQuiet = [theNumberYouSaved boolValue];