NSUserDefaults包含值还是不包含?
没有办法检查NSUserDefaults中的对象是否为空。 但是,您可以检查特定密钥的值是否为零。
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
NSObject * object = [prefs objectForKey:@"your_particular_key"];
if(object != nil){
//object is there
}
NSUserDefaults *data = [NSUserDefaults standardUserDefaults];
NSString *string = [data objectForKey:@"yourKey"];
if(string==nil)
NSlog(@"nil")
// 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"];
你应该比较为零,而不是NULL,因为@Krishnabhadra说。 – 2012-02-09 06:29:28
@PhilippeSabourin谢谢。 NULL是一个void *,nil是一个id。 – 2012-02-09 06:36:57
要检查特定值是否设置与否,没有它的位置的物质(全局或应用程序),检查-[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"
字符串值。
感谢它的工作 – 2012-02-09 07:20:29
真棒解决方案... :) – Adi 2014-06-24 10:14:03