сохранить 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];