2011-04-07 17 views
6

yılında bool kaydedin:benim app müzik çalıyor başladığında 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]; } 

ama o yine müzik tekrar açmalısınız düğmeye basarsa bir düğmeye basarak müziği kapatmak gerekir. Ben elimden geleni yaptım sanırım:

-(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"]; } } 

Şimdi ilk ViewController'ımda, müziği açıp kapatabildiğim ama müzik çalarken başka bir viewController'a gittiğimde, sonra tekrar geri dönüp düğmeye bastığımda çalışıyorum, müzik durmuyor ve birçok kez bastığımda Müzik ikinci kez çalınır ve örtüşür.

Hala sorun nedir? NSNumber nesnesine

cevap

32

bir NSNumber onu sarmak için gerek yok, bunun için bazı kolaylık yöntemleri vardır:

BOOL, kullanımını belirlemek için:

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

erişmek için kullanım:

[userDefaults boolForKey:@"yourKey"]; 

[DÜZENLEME CEVAP İÇİN EK SORU]

Neden NSUserDefaults kullanıyorsunuz - elde etmeye çalıştığınız şey için gereksiz görünüyor? İşte/durdur müziği başlatabilir bir düğme için böyle yapardı: Bir NSNumber sararak

-(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

tasarruf eserler ah ama şimdi hala bir sorun var, sorumu düzenledim – Leon

+0

Bu farklı bir soru ama cevabımı düzenledim, yardımcı olup olmadığına bak. NSUserDefaults'u kullanmanız gerektiği gibi görünmüyor. – Rog

+0

Sorgulamadan önce sormamda gerekeni açıkladı, sildiğim için özür dilerim. Farklı denetleyicilerim var. Örnekleme için uygulama başlar, müzik çalıyor ve başka bir viewcontroller'a gidip tekrar geri dönüyorum. bu durumda bool hala hayır. Bu durumda düğmeye bastığımda müzik ikinci bir kez başlayacak ve üst üste gelecektir. anladın? – Leon

5

Kutu sizin BOOL değer ve NSUserDefault ekleyin:

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

Daha sonra kaydetmek için NSUserDefaults

+0

böylece aynı zamanda bir 'setBool' işlevi var olan gereksiz :) – Rog

+0

@Rog gerçekten :) – Vladimir

0

yılında -boolForKey: işlevini kullanarak düz BOOL bu değeri almak mümkün olacak:

onu geri okuduğunda
[boolUserDefaults setObject:[NSNUmber numberWithBool:isQuiet] forKey:@"stringKey"]; 

, bir NSNumber olarak okumak daha sonra yapın:

BOOL savedIsQuiet = [theNumberYouSaved boolValue];