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

Swift - как установить начальное значение для NSUserDefaults

У меня есть переключатель под названием soundSwitch, я сохраняю состояние кнопки, используя по умолчанию пользователя:

@IBAction func soundsChanged(sender: AnyObject) {
        if soundSwitch.on{
            defaults.setBool(true, forKey: "SoundActive")
            print("Sound ON")
        }else{
            defaults.setBool(false, forKey: "SoundActive")
            print("Sound OFF")
        }
    }

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

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

Я видел методы в Objective-C, но ничего в Swift. Из того, что я видел, вы можете сделать это в делетете приложения каким-то образом или в файле plist. Как мне сделать это?

4b9b3361

Ответ 1

Пример синтаксиса Swift 3

Зарегистрировать логическое значение по умолчанию:

UserDefaults.standard.register(defaults: ["SoundActive" : true])

И чтобы получить значение:

UserDefaults.standard.bool(forKey: "SoundActive")

Sidenote: хотя приведенный выше код вернет true, обратите внимание, что это значение фактически не записывается на диск до тех пор, пока вы не установите:

UserDefaults.standard.set(true, forKey: "SoundActive")

Ответ 2

Добавьте это в свой метод didFinishLaunchingWithOptions из AppDelegate. Как указывали некоторые другие, старайтесь не злоупотреблять, вкладывая все в этот метод.

 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

    /// Here you can give default values to your UserDefault keys
    UserDefaults.standard.register(defaults: [
        "SoundActive": true,
        "someOtherKey": "Some Message"
        ])
}

Ответ 3

Используя "registerDefaults", вы можете установить значение по умолчанию для NSUserDefaults

let userDefaultsDefaults = [
            "SoundActive" : true
        ]

NSUserDefaults.standardUserDefaults().registerDefaults(userDefaultsDefaults)

Примечание: напишите это в файле didFinishLaunchingWithOptions, поэтому значение по умолчанию установлено.

напишите ниже код, где вы хотите проверить

 let onoroff = NSUserDefaults.standardUserDefaults().objectForKey("SoundActive") as! Bool!

 if (onoroff != nil && onoroff == false)
 {
    self.checkForAgreement()
 }

Ответ 4

Нет ничего быстрого или специального делегата приложения.

Исходные значения по умолчанию устанавливаются вызовом registerDefaults: в экземпляре standardUserDefaults.

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

Только если у вас есть что-то, что используется несколькими различными частями кода, вы должны подумать об этом в делетете приложения, а затем только в том случае, если у вас нет другого подходящего контроллера для его выполнения.

Ответ 5

Swift 4

Я предпочитаю реализовывать функцию, аналогичную UserDefaults.string(forKey:), которая возвращает nil, если значение не установлено. В сочетании с Оператор, вам не нужно записывать какие-либо значения по умолчанию на диск, если вы не установите их позже.

extension UserDefaults {

    public func optionalInt(forKey defaultName: String) -> Int? {
        let defaults = self
        if let value = defaults.value(forKey: defaultName) {
            return value as? Int
        }
        return nil
    }

    public func optionalBool(forKey defaultName: String) -> Bool? {
        let defaults = self
        if let value = defaults.value(forKey: defaultName) {
            return value as? Bool
        }
        return nil
    }
}

Затем вы можете получить значения по умолчанию следующим образом

let defaults = UserDefaults.standard
let userName = defaults.string(forKey: "Username") ?? "Happy"
let userAge = defaults.optionalInt(forKey: "Age") ?? 21
let isSmart = defaults.optionalBool(forKey: "Smart") ?? true

Ответ 6

func lastStatus() -> Bool {
    let defaultValue = true
    if let value = default.valueForKey("SoundActive") {
        // then use it
        return value as? Bool ?? defaultValue
    } else {
        // oh, no value?
        return defaultValue
    }
}

Я думаю, что это лучший способ его использования. Также register(defaults:) поможет, но в документации Apple предлагают использовать его как fallback, например, разделение ситуации no value и default value. В зависимости от ваших потребностей.

Ответ 7

Если вы действительно хотите это сделать, поместите это в AppDelegate:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

    let defaults = NSUserDefaults.standardUserDefaults()
    if defaults.valueForKey("SoundActive") == nil {
        defaults.setBool(true, forKey: "SoundActive")
    }

Если он используется только в одном диспетчере представлений, подумайте о том, чтобы вместо этого использовать код в методе viewDidLoad!

Ответ 8

Поместите это в свой "doneFinishLaunchingWithOptions" в AppDelegate.

if defaults.valueForKey("launchedAlready") == true {
       print("Not first launch.")
    }
    else {
       defaults.setValue(true, forKey: "launchedAlready")
        defaults.setBool(true, forKey: "SoundActive")
        print("Sound ON")
    }

Ответ 9

Установите и активируйте звук.

  var isSoundActivated: Bool {
        get {
            return defaults.bool(forKey: "SoundActive")
        }
        set {
            defaults.set(newValue, forKey: "SoundActive")
            defaults.synchronize()
        }
    }

Установить значение bool на

isSoundActivated = true

проверить значение bool на

if isSoundActivated {
  print("sound activated")
}