2012-02-09 128 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"字符串值。