NSUserDefaults Содержит значение или нет? - программирование
Подтвердить что ты не робот

NSUserDefaults Содержит значение или нет?

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

4b9b3361

Ответ 1

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

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];

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

Ответ 2

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"];

Ответ 3

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