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

Как определить, когда настройки меняются на iOS

Я создал пользовательский пакет Settings.app, используя стандартный подход root.plist для iPhone. Мне интересно, есть ли способ определить, когда пользователь изменяет эти настройки в моем приложении...

4b9b3361

Ответ 1

Вы можете прослушивать уведомления NSUSerDefaultsDidChange с помощью этого:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(defaultsChanged) name:NSUserDefaultsDidChangeNotification object:nil];

Всякий раз, когда NSUserDefaults изменяется, вызывается defaultsChanged.

Не забудьте вызвать [[NSNotificationCenter defaultCenter] removeObserver:self];, если вы хотите прекратить прослушивание этих уведомлений (вы также должны сделать это, когда объект будет освобожден).

Ответ 2

Синтаксис для Swift 2. Используя Swift, вы сделаете что-то подобное, чтобы подписаться на изменения для NSUserDefaults:

NSNotificationCenter.defaultCenter().addObserver(self, selector: "defaultsChanged:", name: NSUserDefaultsDidChangeNotification, object: nil)

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

func defaultsChanged(notification:NSNotification){
    if let defaults = notification.object as? NSUserDefaults {
       //get the value for key here
    }
}

Ответ 4

Пример доступа к настройке типа Bool для приложения с ключом "instantWeb":

func observeUserDefaults(notification: NSNotification) {
    print("Settings changed")
    if let defaults = notification.object as? NSUserDefaults {
        if defaults.valueForKey("instantWeb") as! Bool==true {
            print("Instant Web ON")
        }
    }
}

Ответ 5

SWIFT 4

Зарегистрировать наблюдателя в viewController,

NotificationCenter.default.addObserver(self, selector: #selector(settingChanged(notification:)), name: UserDefaults.didChangeNotification, object: nil)

Селекторная реализация

 @objc func settingChanged(notification: NSNotification) {
    if let defaults = notification.object as? UserDefaults {
        if defaults.bool(forKey: "enabled_preference") {
            print("enabled_preference set to ON")
        }
        else {
            print("enabled_preference set to OFF")
        }
    }
}

Ответ 6

Слушайте изменение настроек

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(someMethod:) name:NSUserDefaultsDidChangeNotification object:nil];

Не забудьте удалить наблюдателя, как только этот контроллер просмотра больше не находится в памяти.

Ответ 7

В iOS10 попробуйте следующее:

UNUserNotificationCenter.current().getNotificationSettings { (settings) in
    // Your code here
}