2011-04-07 82 views
0

編輯布爾節能問題

我有我的應用程序一個聲音,開始時,應用程序開始玩。另外我有兩個方法來播放和停止的聲音:

-(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有一個按鈕,停止/啓動音樂(取決於wheter音樂播放或不)。

所以我有:

-(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仍然沒有。

我的錯誤在哪裏?

回答

0

這不是一個答案,嚴格地說,但希望它會爲您在正確的軌道上......

添加一些日誌記錄(通過NSLog(...)或添加記錄斷點)的NO和YES案件上面的代碼輸出值爲isquiet。然後,您可以看到在不同場景下按下按鈕時調用哪些代碼路徑。

+0

確實沒有答案,你應該做這個評論。我試了這個,這是好的。布爾具有應有的價值,我認爲問題在另一點上。 – Leon 2011-04-07 22:32:39

+0

@Leon:你是對的。這是爲了引導你找到一個解決方案,而這個解決方案並不完全屬於「答案」的定義。我的印象是你希望人們試圖幫助你,我認爲這可能實際上解決了你的問題,但你顯然更關心他們是否正確地遵循了規範。 – 2011-04-07 22:52:49

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"]; 
+0

仍然不起作用,但我遇到了問題,您可以在我編輯的問題中看到它 – Leon 2011-04-08 15:46:58