2011-01-31 17 views
5

benim başlatma aşağıdaki kodu benim app (ilk kez) vardır:ayarlanamaz NSUserDefaults alan

Çok daha sonra kodda
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
NSString *[email protected]"1"; 
[defaults setObject:uid forKey:@"init_val"]; 
[defaults synchronize]; 

(bir düğmeye basarak yanıt olarak) kullanıyorum değerini kontrol:

initVal her zaman sıfırdır. Kontrol ettim ve init_val ayar ayarlarımda tam olarak aynı ayarlanmış bir başka alan olarak ayarlayabildiğim ve okumadan okuyabileceğim (her ikisi de "Anahtar" adında tek bir alanla ayarlanmış.)

+0

Hm, odd. -stringForKey kullanırsanız aynı şey olur mu: -objectForKey yerine:? Ayrıca, -synchronize YES döndürüyor mu? – macserv

+0

Önce stringForKey denedim. Ve senkronizasyon döndürür YES – mlewis54

+0

Cevabımıma bakın. Cevabımdaki cevabınızı alacağınızdan eminim. Cevabımla ilgili herhangi bir sorunla karşılaşırsanız yorum bırakın. –

cevap

5

:

Bu kodu deneyebilirsiniz. Bunun sizin için çalışacağından eminim. Daha sonra,

o nil verir hala varsa:

NSString *initVal=[[NSUserDefaults standardUserDefaults] valueForKey:@"init_val"]; 

VEYA

NSString *initVal=[[NSUserDefaults standardUserDefaults] objectForKey:@"init_val"]; 

DÜZENLEME:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
NSString *[email protected]"1"; 
[defaults setObject:uid forKey:@"init_val"]; 
[defaults synchronize]; 

veri alınıyor için aşağıdaki kodu kullanabilirsiniz mı

NSString *initVal=[NSString stringWithFormat:@"%@",[[NSUserDefaults standardUserDefaults] valueForKey:@"init_val"]]; 

VEYA

NSString *initVal=[NSString stringWithFormat:@"%@",[[NSUserDefaults standardUserDefaults] objectForKey:@"init_val"]]; 

Umut bu size yardımcı olur: Aşağıdaki kodu kullanabilirsiniz.

+0

Cevabınız için teşekkürler. Sonunda bu şekilde çalıştım. Günün sonunda moot olduğu ortaya çıktı. Ayarlar işlevini uygulamaya taşıdım ve artık ayar grubunu veya varsayılanları kullanmıyorum. Herkesin girişini takdir ediyorum. – mlewis54

+0

@ mlewis54: Hoş Geldiniz .. Size yardımcı olduğuna sevindim. :-) –

0

kodunuzu, benim projede kopyalamak için güvenilir ve iyi çalıştı, sen initVal kontrol ederken böylece hata muhtemelen olabilir ... Eğer initVal? nil olup olmadığını görmek için kullanmak kod ne

ve siz initVal seçeneğini işaretlediğinizde/bulunduğunuzda, bu var/eğim hala görünüyor?

Okuma kodunuzdan hemen sonra bunu eklemeye çalışın:

NSLog(@"____text read in pref: %@", initVal); 

bu benim konsol penceresinde yazıyor ->_ tereh okumak _text: 1

tabii ki aklınızda tutmak bir NSString, umarım oluyor bir int veya NSNumber değil bunu kontrol ederken ...

luca

+0

InitVal öğesini (! InitVal) {<<< sonra inited >>>} değerini kullanarak kontrol ediyorum. Masama döndüğümde hata ayıklayıcı değeri yayınlayacağım. Bunun 0x0 olduğuna inanıyorum. Bir satırdaki ifadeleri çalıştırdığım için herhangi bir kapsam sorunu yoktur (yukarıdaki varsayılanı aldığım 2 ve sonra if ifadesi). – mlewis54

+0

daha sonra kodu doğru olduğundan emin olmak için şunu denedim: NSString * initVal = [defaults objectForKey: @ "init_val"]; if (! InitVal) { \t NSLog (@ "__ 1__text pref:% @" oku, initVal); } else { \t NSLog (@ "__ 2__text pref:% @" oku, initVal); // Bu konsol penceresinde } yürütülür: tereh okumak __2__text: 1 daha sonra bir hata başka bir yerde olmalı ... xcode "inşa" menüsü altında "tüm hedefleri temizlemeye" deneyin ... yapar cihazda veya simülatörde olur mu? – meronix

+0

Her ikisi de. Temiz yardım etmedi. – mlewis54

0

Eğer düzgün NSUserDefaults başlatmak emin misiniz? Ben başlatmak geldiğimde, uygulama temsilci, hep varsayılan değerler bir sözlük oluşturarak varsayılan kullanıcı varsayılan oluşturun:

[[NSUserDefaults standardUserDefaults] registerDefaults:appDefaults]; 

appDefaults sözlüğü olduğu yere. O zaman onlara doğru bir şekilde erişebilmelisiniz.

+0

Uygulama temsilcisinin başka bir yerinde, sözlüğü varsayılan (değer/anahtar) çiftleriyle ayarlayın. – mlewis54

1

Çizgiyi

NSString *initVal = [defaults stringForKey:@"init_val"]; 

kullanmak gerekir - bu bir dize olacağından kullanmalıdır. Boole değeri almak için benzer şekilde boolForKey kullanabilirsiniz.

0

Bu, başlatma işleminin gerçekleşmemiş olması olabilir. Uygulandığını kontrol etmek için bir NSLog yerleştirin.

0

Aynı kodla benim için çalışıyor: konsolda

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
NSString *[email protected]"1"; 
[defaults setObject:uid forKey:@"init_val"]; 
[defaults synchronize]; 

NSUserDefaults *defaultss = [NSUserDefaults standardUserDefaults]; 
NSString *initVal=[defaultss objectForKey:@"init_val"]; 
NSLog(@"Value of initVal: %@",initVal); 

O/P: initVal Değeri: 1

Yani konsolda baskı ile aynı kod ile bunu deneyin. düğmeyi tıklamak üzerinde bir etkinlikte

1

Decelare bu ...

NSUserDefaults *savedData = [NSUserDefaults standardUserDefaults]; 
[savedData setObject:userEmailTextField.text forKey:@"userid"]; 

ve yük verileri yüklemek ve gösteren ya da olmasın girdiniz değerini kontrol edin ...mlewis54 @

userEmailTextField.text =[[NSUserDefaults standardUserDefaults]objectForKey:@"userid"];