如何确定iOS上的设置更改时间

时间:2010-10-13 19:47:03

标签: iphone ios settings plist

我使用iPhone的标准root.plist方法创建了一个自定义的Settings.app软件包。我想知道是否有办法确定用户何时在我的应用程序中更改这些设置...

7 个答案:

答案 0 :(得分:39)

您可以使用以下方式收听NSUSerDefaultsDidChange通知:

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

每当NSUserDefaults发生变化时,都会调用defaultsChanged

当您想要停止侦听这些通知时,不要忘记调用[[NSNotificationCenter defaultCenter] removeObserver:self];(当对象被取消分配时,您也应该这样做。)

答案 1 :(得分:11)

语法适用于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
    }
}

答案 2 :(得分:7)

注册接收NSUserDefaultsDidChangeNotification次通知。这不是显而易见的,但iOS Application Programming Guide将其描述为:

  

您的应用程序的首选项   通过设置公开   申请被更改

答案 3 :(得分:2)

使用键“instantWeb”访问特定于应用程序的Bool类型设置的示例:

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")
        }
    }
}

答案 4 :(得分:2)

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")
        }
    }
}

答案 5 :(得分:1)

收听设置中的更改

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

一旦此视图控制器不再在内存中,请记住删除观察者。

答案 6 :(得分:-1)

在iOS10中,试试这个:

{
 "A":{
   "name":"Ram",
   "gender":"male",
   "designation":"engineer"
 },
 "B":{
  "name":"Shyam",
  "gender":"male",
  "designation":"student"
 },
 "C":{
  "name":"Mohan",
  "gender":"male",
  "designation":"manager"
 }
}