2011-05-06 82 views
0

我用什麼條件來知道我使用的NSUserDefaults?如何知道是否存在NSUserDefault?

NSUserDefaults *preftest; 
preftest=[NSUserDefaults standardUserDefaults]; 
NSString *opening = [preftest stringForKey:@"opening"]; 

這是我得到數據的方式。我想進入if條件,如果preftext stringForKey:@「開放」已經不存在....所以,我想:

if (opening == nil) { 
    ... 
    NSUserDefaults *pref = [NSUserDefaults standardUserDefaults]; 
    [pref setObject:@"OK" forKey:@"pass"]; 
    NSString *finalfr = [pref stringForKey:@"opening"]; 
    NSLog(@"(here's the new value of opening: %@)", finalfr); 
    ... 
} 

if (opening != nil) { 
    NSLog(@" != nil"); 
    // http request} 

但inded,這是行不通的。

感謝幫助我!

+0

NSUserDefaults的行爲就像一個NSDictionary - 如果沒有鍵的值,它返回nil,所以你的if條件應該工作。你怎麼知道它沒有? – CharlieMezak 2011-05-06 13:20:18

+0

我已經把[pref setObject:@「OK」forKey:@「pass」];設置NSUserDef ... Appareltly,錯誤會因此而引起! – clement 2011-05-06 13:48:06

回答

1

我想進入,如果 的preftext stringForKey如果條件:@「開放」 存在....

但是,如果它存在,你正在測試與opening != nil。 如果你想測試它是否不存在,它將是opening == nil或只是!opening

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; 
NSString *opening = [prefs stringForKey:@"opening"]; 

if (!opening) { 
    [prefs setObject:@"OK" forKey:@"opening"]; 
    opening = [prefs stringForKey:@"opening"]; 
    NSLog(@"(here's the new value of opening: %@)", opening); 
    // prints: (here's the new value of opening: OK) 
} 
+0

@albertamg:所以這是一個問題從「[pref setObject: @「確定」forKey:@「pass」];「 : -/ – clement 2011-05-06 13:46:14

+0

@clement:'stringForKey:'如果默認值不存在或不包含字符串,則返回'nil'。所以,如果你比較'opening == nil'第一次會進入if。如果你在if中設置了默認值,那麼它第二次不會進入if。如果默認存在,您的原始代碼只進入「if」。 – albertamg 2011-05-06 13:54:16

+0

@albertamg:我用當前正在運行的代碼更新了第一篇文章;-) – clement 2011-05-06 14:05:02

1

也許不是比較指針與nil,而是將內容與一個空字符串進行比較[打開isEqualToString:@「」],它返回一個布爾值。

+0

只是一個快速註釋 - 這節省了我成長的灰色頭髮:-)它可能不是這個問題的答案,但肯定回答我的:-) +1投票 – 2012-05-23 11:36:19

相關問題