NSUserDefaults, UISwitch и установка значения по умолчанию

У меня есть UISwitch, который используется для включения или выключения звука. Состояние сохраняется с помощью NSUserDefaults. Работает отлично. Но если приложение запускается с самого начала после его установки, значение BOOL равно 0, а переключатель находится в положении OFF. Потому что ни одно значение не было сохранено ранее. Таким образом, по умолчанию выключено, и вы можете включить его, и в следующий раз он все еще будет включен.

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

Как мне это решить?


person Lars -    schedule 29.01.2013    source источник
comment
вы можете установить логическое значение yes во время запуска приложения в первый раз   -  person mayuur    schedule 29.01.2013


Ответы (2)


В application:didFinishLaunchingWithOptions: вы проверяете, не установлен ли уже конкретный ключ. Если возвращается nil, вы устанавливаете его на значение по умолчанию по вашему выбору. Взгляните на фрагмент ниже для разъяснения.

Я рекомендую вам использовать objectForKey: в операторе if, так как это делает код более простым и менее подверженным ошибкам. Конечно, значение по умолчанию может быть любым.

Цель-C

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];

    if (![ud objectForKey:@"YOUR_KEY"]) {
        [ud setBool:YES forKey:@"YOUR_KEY"];
    }

    // Your Custom Code

    return YES
}

Свифт 3

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    let ud = UserDefaults.standard

    if ud.object(forKey: "YOUR_KEY") == nil {
        ud.set(true, forKey: "YOUR_KEY")
    }

    // Your Custom Code

    return true
}
person Bart Jacobs    schedule 29.01.2013
comment
Супер. Это сработало. Я поместил код, кроме первой строки, под - (void)viewDidLoad. Спасибо - person Lars -; 29.01.2013
comment
Может ли кто-нибудь добавить Swift 3 в редактирование или другой ответ? Спасибо! - person Gabe12; 04.03.2017

При загрузке applicationDidFinish просто проверьте значение в тех, о которых вы беспокоитесь, и, если оно равно null, установите их по умолчанию, в вашем случае это 0 / OFF / NO.

Аналогично для всех элементов пользовательского интерфейса.

person Anoop Vaidya    schedule 29.01.2013