2012-12-17 46 views
2
NSDictionary *dictionnary = [[NSDictionary alloc] initWithObjectsAndKeys:@"content", @"myKey", nil]; 
[[NSUserDefaults standardUserDefaults] registerDefaults:dictionnary]; 
[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"myKey"]; 
[[NSUserDefaults standardUserDefaults] synchronize]; 
NSLog(@"%@",[[NSUserDefaults standardUserDefaults] objectForKey:@"myKey"]); 

日誌的默認值:如果我使用「registerDefaults」註冊違約,我不能刪除我註冊

2012-12-17 17:09:05.062 browserHD[4075:c07] content 

爲什麼結果值「內容」?我想要結果值「無」。

+0

或者我可以更改我註冊的值嗎? –

+0

檢查我的代碼,並請更新我 –

回答

0

registerDefaults影響與setObject:forKey:或removeObjectForKey不同的「用戶默認級別」。它進入全球用戶默認值,這是比標準用戶默認值更高的級別。 「全球」是一個誤稱,因爲它仍然是本地的應用程序。

您不能使用此方法從全局用戶默認值中刪除值。

Global Defaults (NSGlobalDomain) -> User Defaults (NSRegistrationDomain)

如果值是用戶值,那麼它將覆蓋全局值。如果不是,則採用全局默認值。添加和刪​​除值僅影響用戶默認級別。

顯然,你不能擺脫全局默認值,因爲如果你刪除用戶默認值,全球人將永遠「閃耀」。但是,您可以將對象值設置爲您想「替換爲零」的值,以[NSNull null]。然後在你的代碼中檢查這種情況:或者默認爲零,或者是[NSNull null],它會告訴你該值沒有設置。

+0

我使用resetStandardUserDefaults重置,但默認仍然存在。 –

+0

哦,那麼我錯了,你不能取消註冊默認值。 – Cocoanetics

2

是的你是正確的......

這可能不是最完美的解決方案。但有一點調整來解決這個問題。

如果你使用這種方式,它的工作原理!

- (IBAction)set:(id)sender { 
    NSMutableDictionary *aDict=[NSMutableDictionary new]; 
    [aDict setObject:_myText.stringValue forKey:@"key"]; 

    [[NSUserDefaults standardUserDefaults] registerDefaults:aDict]; 
} 

- (IBAction)remove:(id)sender { 
    NSMutableDictionary *aDict=[NSMutableDictionary new]; 
    [aDict setObject:@"null" forKey:@"key"]; 
    [[NSUserDefaults standardUserDefaults] registerDefaults:aDict]; 
} 

- (IBAction)get:(id)sender { 
    NSLog(@"-> %@",[[NSUserDefaults standardUserDefaults]objectForKey:@"key"]); 
} 
+0

謝謝。我知道如果我使用「setObject:」,它可以工作。但問題是我必須使用「registerDefaults:」。 –

+0

檢查這個微調編碼。 –