2010-05-18 138 views
1

我正試圖在iPhone/iPad應用程序中保存一些信息。 問題是,它的工作原理,但如果我關閉了應用程序(與模擬器上的主頁按鈕或關閉與CMD + Q)信息會丟失!NSUserDefaults不保存

這是我的代碼(如果你看,我用「syncronize」)

- (IBAction)choose1{ 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    [defaults setObject:@"choose1" forKey:@"choose"]; 
    [defaults synchronize]; 
} 

- (IBAction)choose2{ 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    [defaults setObject:@"choose2" forKey:@"choose"]; 
    [defaults synchronize]; 
} 

- (IBAction)openview{ 
    NSString *var = [[NSUserDefaults standardUserDefaults] objectForKey:@"choose"]; 
    if (var == @"choose1"){ 
     [self pushViewController:view1 animated:YES];} 
    else if (var == @"choose2"){ 
     [self pushViewController:view2 animated:YES]; 
    } 

} 

我不明白爲什麼:(

+1

比較'NSString'由'[var isEqualToString:@「choose1」]'!完成! – bddckr 2010-05-18 22:28:49

回答

2

比較字符串時,你應該使用isEqualToString方法,即:

if ([var isEqualToString:@"choose1"]){ 

否則你是比較實際的對象,而不是它們的內容。

+0

如果你不使用isEqualToString,那麼你正在比較指向對象的指針,而不是實際的對象。 – progrmr 2010-05-18 23:25:23

+0

YESSSSSSSSSSSSSSSSSSSSSSSS! :D 解決!!!! 謝謝男人!!!!真!!! – JAA 2010-05-18 23:42:03

+0

不客氣,是的,編程是正確的,他的更正。 – 2010-05-19 00:20:16

1

我不能完全肯定,但或許它是。保存您的默認設置,位於其他地方的錯誤,我想你「的OpenView」的方法:

- (IBAction)openview{ 
NSString *var = [[NSUserDefaults standardUserDefaults] objectForKey:@"choose"]; 
if (var == @"choose1"){ 
    [self pushViewController:view1 animated:YES];} 
/** you are comparing to "choose1" here as well. **/ 
else if (var == @"choose1"){ 
    [self pushViewController:view2 animated:YES]; 
} 

另一個possibilty可能是你從來沒有打電話給你選中1()或choose2()方法?這可以解釋爲什麼值永遠不會改變。

儘管存在這兩種可能性,但我認爲在用於更改UserDefaults的代碼中沒有錯誤。

希望這會有所幫助。

問候,

Gjallar

0

啊,我很抱歉:我是意大利,所以我用這個詞「選」與意大利語的翻譯「scelta」。 在這裏我翻譯成英文,我寫了「choose1」,但在我的代碼我使用「choose2」(或「scelta2」:P)

其他可能性(我從來沒有調用函數choose1()或選擇2())...不,我打電話過,當然!

+0

不要回答你自己的問題,以這種方式提供更多信息。改爲編輯你的問題。 – 2010-05-18 23:16:42

+0

是的。謝謝!! :) – JAA 2010-05-18 23:42:58