NSUserDefaults содержит значение или нет? - PullRequest
18 голосов
/ 09 февраля 2012

Как узнать, содержит ли NSUserDefaults какое-либо значение? Как проверить, пусто ли оно?

Ответы [ 3 ]

55 голосов
/ 09 февраля 2012

Нет способа проверить, является ли объект в NSUserDefaults пустым или нет.Однако вы можете проверить, является ли значение для определенного ключа нулевым или нет.

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];

NSObject * object = [prefs objectForKey:@"your_particular_key"];
if(object != nil){
   //object is there
}
1 голос
/ 09 февраля 2012
NSUserDefaults *data = [NSUserDefaults standardUserDefaults];  
NSString *string = [data objectForKey:@"yourKey"];
if(string==nil)
NSlog(@"nil")  

Посмотрите документацию NSUserDefault

// 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 голосов
/ 09 февраля 2012

Чтобы проверить, установлено или нет определенное значение, независимо от его местоположения (глобального или прикладного), проверьте возвращаемое значение -[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", которое будет взято из глобальных настроек, даже если ваше приложение никогда не устанавливало это значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...