2009-09-13 30 views
6

Hey Guys Ben NSUserDefaults ilgili sorunlar yaşıyorum ve ben oldukçaNSUserDefaults düzgün

Benim App oluyor 5 seviyeleri vardır ve her seviye NSUserDefaults ile aynı şeyi (yapar ne anlamıyorum seviyeleri varsayılan alır , kullanıcı seviyeyi oynattıkça değeri değiştirir ve ardından varsayılanları ayarlar ve seviyenin sonunda senkronize eder) ilk 4 seviye ... bir aksama olmadan çalışır ancak son seviye değerleri kaydetmez. Uygulama çökmez ve son seviye gerçekleşen en son şey değildir. Ve uygulama bittiğinde varsayılanlar bile senkronize olur. NSUserDefaults üzerinde maksimum boyutu var mı ya da orada birşey kimse ben aşağıdaki kodu göndeririz değil ki düşünebiliriz ama dediğim gibi ben geçtiğinizde zaman ilk dört seviyeleri mükemmel

//header 
NSUserDefaults *userData; 


@property(nonatomic,retain) NSUserDefaults *userData; 


//class file 
//Sets the boolean variables for the class to use 
userData = [NSUserDefaults standardUserDefaults]; 
boolOne = [userData boolForKey:@"LevelFiveBoolOne"]; 
boolTwo = [userData boolForKey:@"LevelFiveBoolTwo"]; 
boolThree = [userData boolForKey:@"LevelFiveBoolThree"]; 
boolFour = [userData boolForKey:@"LevelFiveBoolFour"]; 
boolFive = [userData boolForKey:@"LevelFiveBoolFive"]; 
boolSix = [userData boolForKey:@"LevelFiveBoolSix"]; 
boolSeven = [userData boolForKey:@"LevelFiveBoolSeven"]; 

//End Of Level 
[userData setBool:boolOne forKey:@"LevelFiveBoolOne"]; 
[userData setBool:boolTwo forKey:@"LevelFiveBoolTwo"]; 
[userData setBool:boolThree forKey:@"LevelFiveBoolThree"]; 
[userData setBool:boolFour forKey:@"LevelFiveBoolFour"]; 
[userData setBool:boolFive forKey:@"LevelFiveBoolFive"]; 
[userData setBool:boolSix forKey:@"LevelFiveBoolSix"]; 
[userData setBool:boolSeven forKey:@"LevelFiveBoolSeven"]; 
[userData synchronize]; 

çalışmak Bu varsayılanları kullanan görünüme göre değerler doğrudur, ancak uygulamayı sonlandırdığımda ve yeniden başlattığımda, bu değerler kaydedilmez, diğer tüm seviyeler aynı işlemi yapar ve bu, çalışmayan tek düzeydir.

Uzun bir süredir buna baktım ve dışarıda birisinin aynı sorunla karşılaştığını ve nasıl çözüldüklerine dair bana biraz bilgi verebileceğini umuyorum. Ayarladığınız başlangıç ​​varsayılan LevelFive varsayılan yoksa o zaman çağrıları başarısız olur,

// load the default values for the user defaults 
userDefaultsValuesPath=[[NSBundle mainBundle] pathForResource:@"UserDefaults" ofType:@"plist"]; 
userDefaultsValuesDict=[NSDictionary dictionaryWithContentsOfFile:userDefaultsValuesPath]; 

// set them in the standard user defaults 
[[NSUserDefaults standardUserDefaults] registerDefaults:userDefaultsValuesDict]; 

:

gibi bir şey var Öncesinde BWC

+0

Ne gönderdiğinizden anlatmak zor. Seviyeden sonra varsayılanları kaydeden yöntemi iki kez kontrol edin. – Jordan

cevap

2

Somewhere teşekkür ederiz.

Hatalar için -synchronize öğesinden dönüş değerini kontrol edin.

0

Bu sorunu bir kenara koymaya ve seviye 5'ten sonra bir şeyler ekleme dahil olmak üzere geliştirmeye devam etmeye karar verdim, böylece kullanıcı seviyelere dönüp ana menüye dönebilir ve bu şekilde devam edebilir ... ve neden emin değilim Ancak, userDefaults şimdi 5. düzey için tasarruf sağlıyor, çünkü bunun nedeni, 5. seviyenin uygulamadan sonraki son şey olmasından ve kendi kendini sonlandırmasa bile ve başka şeyler yapmamasından kaynaklanıyor olabilir. varsayılan disk ... Ben hala neyin yanlış olduğunu emin değilim ama şimdi çalışıyor ve senkronizasyon ile bir hata alıp alamayacağımı görmek için alamıyorum ...

Yardımın için teşekkürler

4

Sadece durumda birisi bu genelinde çalışır: Bir NSDictionary veya NSArray kullanıcı varsayılan içinde (bunlardan ikisinin veya değişken Nesneleri) ve onlar saklarken Bir NSURL Nesnesi saklanmış, verileri senkronize olarak kaydetmez!

+0

Bu nasıl sinir bozucu ?! –