Подтвердить что ты не робот

IPhone - Как определить, существует ли ключ в NSUserDefaults standardUserDefaults

Используя NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];,

Я использую такие вызовы, как BOOL boolFromPrefs = [defaults boolForKey:@"theBoolKey"]; Чтобы получить сохраненное значение BOOL.

Если ключ не найден, возвращается NO (поведение по умолчанию для boolForKey).
Но... НЕТ может быть сохраненной настройкой. То же самое для intForKey

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

4b9b3361

Ответ 1

Сделайте это правильно и зарегистрируйте значения по умолчанию.

NSDictionary *userDefaultsDefaults = @{
    @"SomeKey": @NO,
    @"AnotherKey": @"FooBar",
    @"NumberKey": @0,
};
[NSUserDefaults.standardUserDefaults registerDefaults:userDefaultsDefaults];

сделайте это, прежде чем использовать что-либо из NSUserDefaults. Начало application:didFinishLaunchingWithOptions: - безопасное место.

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

Если вы используете значения по умолчанию, вам не нужно использовать проверку для ключа "isFirstLaunch", как это предлагается в других ответах.
Это поможет вам при развертывании обновления, и вы хотите изменить значение по умолчанию для элемента NSUserDefaults.

Ответ 2

Проверьте, существует ли объект перед преобразованием в BOOL.

if ([defaults objectForKey:@"theBoolKey"] != nil) {
    boolFromPrefs = [defaults boolForKey:@"theBoolKey"];
} else {
    boolFromPrefs = DEFAULT_BOOL_VALUE;
}

Ответ 3

Я сделал это следующим образом:

NSUserDefaults *prefs = NSUserDefaults.standardUserDefaults;
if ([[prefs dictionaryRepresentation].allKeys containsObject:@"yourKey"]) {
  float yourValue = [prefs floatForKey:@"yourKey"];
}

Ответ 4

Вы можете протестировать, используя objectForKey:, и если это nil, то он не установлен. Все boolForKey возвращает NSNumber, если он есть, и возвращает значение BOOL.

Ответ 5

Я бы рекомендовал установить значения по умолчанию для любого ключа, который может использовать ваше приложение. Вы можете сделать это в приложении: метод didFinishLaunchingWithOptions:. Таким образом, вы узнаете, что каждое значение установлено.

Подсказка, установите для клавиши "defaultsSet" значение "YES", чтобы вы делали это только один раз. Кроме того, не забудьте вызвать [[NSUserDefaults standardUserDefaults] synchronize], чтобы сохранить значения.

Ответ 6

Пример Swift, основанный на ответе MarkPowell

if (NSUserDefaults.standardUserDefaults().objectForKey("SomeBoolSetting") == nil) {
    NSUserDefaults.standardUserDefaults().setBool(true, forKey: "SomeBoolSetting")
    println("Bool WAS nil")
} else {
    var boolValue:Bool? = NSUserDefaults.standardUserDefaults().boolForKey("SomeBoolSetting")
    println("Bool WAS NOT nil \(boolValue)")
}

Ответ 7

быстрая версия ответа @Tim Autin:

if contains(NSUserDefaults.standardUserDefaults().dictionaryRepresentation().keys.array, "chuiser_cook_orders_dirty") {
    println("exist")
} 

Ответ 8

Не сгладьте:

if([NSUserDefaults.standardUserDefaults  objectForKey:@"yourBoolKey"])
{
  // Object Already Stored in User defaults
}
else
{
   //Object not stored
}