NSUserDefaults是否包含价值?

时间:2012-02-09 06:16:34

标签: ios cocoa-touch nsuserdefaults

如何知道NSUserDefaults是否包含任何值?如何检查它是否为空?

3 个答案:

答案 0 :(得分:55)

无法检查NSUserDefaults中的对象是否为空。 但是,您可以检查特定键的值是否为零。

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];

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

答案 1 :(得分: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"];

答案 2 :(得分: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"字符串值,该值将从全局设置中获取,即使您的应用程序从未设置此值。