Как узнать, содержит ли NSUserDefaults
какое-либо значение? Как проверить, является ли его пустым?
NSUserDefaults Содержит значение или нет?
Ответ 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"
, которое будет взято из глобальных настроек, даже если ваше приложение никогда не устанавливало это значение.