сохранить 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 во время воспроизведения музыки, а затем снова и нажмите кнопку, музыка не останавливается, и когда я нажимаю на нее много раз музыка воспроизводится во второй раз и перекрывается.
что еще не так?
3 ответов
нет необходимости обертывать его в 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;
}
поместите значение BOOL в объект NSNumber и добавьте его в NSUserDefault:
NSUserDefaults *boolUserDefaults = [NSUserDefaults standardUserDefaults];
[boolUserDefaults setObject:[NSNumber numberWithBool:isquiet]
forKey:@"stringKey"];
позже вы сможете получить это значение как обычный BOOL, используя
сохранить:
[boolUserDefaults setObject:[NSNUmber numberWithBool:isQuiet] forKey:@"stringKey"];
когда вы читаете его обратно, прочитайте его как NSNumber затем сделайте:
BOOL savedIsQuiet = [theNumberYouSaved boolValue];