2012-02-09 72 views

回答

53

沒有辦法檢查NSUserDefaults中的對象是否爲空。 但是,您可以檢查特定密鑰的值是否爲零。

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; 

NSObject * object = [prefs objectForKey:@"your_particular_key"]; 
if(object != nil){ 
    //object is there 
} 
+0

感謝它的工作 – 2012-02-09 07:20:29

+0

真棒解決方案... :) – Adi 2014-06-24 10:14:03

1
NSUserDefaults *data = [NSUserDefaults standardUserDefaults]; 
NSString *string = [data objectForKey:@"yourKey"]; 
if(string==nil) 
NSlog(@"nil") 

看看NSUserDefault documentation

// For saving the values 
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; 
// saving an NSString 
[userDefaults setObject:@"Ttest" forKey:@"key"]; 
// --- For Retrieving 

NSUserDefaults * userDefaults = [NSUserDefaults standardUserDefaults]; 
// getting an NSString 
NSString *myString = [userDefaults stringForKey:@"key"]; 
+0

你應該比較爲零,而不是NULL,因爲@Krishnabhadra說。 – 2012-02-09 06:29:28

+0

@PhilippeSabourin謝謝。 NULL是一個void *,nil是一個id。 – 2012-02-09 06:36:57

0

要檢查特定值是否設置與否,沒有它的位置的物質(全局或應用程序),檢查-[NSUserDefaults objectForKey:]返回值

id obj = [[NSUserDefaults standardUserDefaults] objectForKey:@"My-Key-Name"]; 
if (obj != nil) {...} 

要檢查應用程序(包)是否有任何設置存儲在用戶默認值:

NSUserDefaults* sdu = [NSUserDefaults standardUserDefaults]; 

NSString* bundleId = [[NSBundle mainBundle] bundleIdentifier]; 
NSDictionary* mainBundleSettings = [sdu persistentDomainForName:bundleId]; 

NSLog(@"%@", mainBundleSettings); 

如果你有興趣在所有可能的值,這-[NSUserDefaults objectForKey:]將返回的東西,包括系統的全局設置,只需撥打

NSDictionary* allPossibleSettings = [sdu dictionaryRepresentation]; 

NSUserDefaults是從來沒有空。它結合了全局設置,包的設置,臨時數據以及其他的東西。例如,如果您撥打:

[[NSUserDefaults standardUserDefaults] objectForKey:@"NSBoldSystemFont"] 

你會得到將從全局設置取,甚至當你的應用程序從未設置這個值@"LucidaGrande-Bold"字符串值。