сохранить bool в nsuserdefaults - PullRequest
       22

сохранить bool в nsuserdefaults

7 голосов
/ 08 апреля 2011

, когда мое приложение запускает воспроизведение музыки:

-(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 во время воспроизведения музыки, затем снова и снова нажимаю кнопку, музыка не останавливается, и когда я нажимаю ее много размузыка воспроизводится во второй раз и перекрывается.

Что еще не так?

Ответы [ 4 ]

36 голосов
/ 08 апреля 2011

Нет необходимости заключать его в NSNumber, для этого есть несколько удобных методов:

Чтобы установить BOOL, используйте:

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

Чтобы получить к нему доступ, используйте:

[userDefaults boolForKey:@"yourKey"];

[ПРАВИТЬ, ЧТОБЫ ОТВЕТИТЬ НА ВАШ ДОПОЛНИТЕЛЬНЫЙ ВОПРОС]

Не уверены, почему вы используете 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;
}
5 голосов
/ 08 апреля 2011

Поместите свое значение BOOL в объект NSNumber и добавьте его в NSUserDefault:

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

Позже вы сможете получить это значение как обычный BOOL, используя функцию -boolForKey: в NSUserDefaults

0 голосов
/ 20 февраля 2019

Swift:

Для сохранения bool:

UserDefaults.standard.set(true, forKey: "storageKey")

Чтобы получить bool:

let boolValue = UserDefaults.standard.bool(forKey: "storageKey")
0 голосов
/ 08 апреля 2011

Для сохранения:

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

Когда вы читаете его обратно, читайте его как NSNumber, затем выполните:

BOOL savedIsQuiet = [theNumberYouSaved boolValue];
...