2011-04-07 135 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];