Iphone 如何确定iOS上的设置何时更改
我使用iPhone的标准Iphone 如何确定iOS上的设置何时更改,iphone,ios,settings,plist,Iphone,Ios,Settings,Plist,我使用iPhone的标准root.plist方法创建了一个自定义Settings.app包。我想知道是否有办法确定用户何时在我的应用程序中更改这些设置…注册以接收通知。这并不明显,但报告中这样描述: 应用程序所需的首选项 通过设置曝光 申请表已更改 您可以使用以下命令侦听NSUserDefaultsIDChange通知: [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(defaultsChange
root.plist
方法创建了一个自定义Settings.app包。我想知道是否有办法确定用户何时在我的应用程序中更改这些设置…注册以接收通知。这并不明显,但报告中这样描述:
应用程序所需的首选项
通过设置曝光
申请表已更改
您可以使用以下命令侦听NSUserDefaultsIDChange通知:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(defaultsChanged) name:NSUserDefaultsDidChangeNotification object:nil];
每当NSUserDefaults发生更改时,将调用defaultsChanged
不要忘记调用
[[NSNotificationCenter defaultCenter]removeObserver:self]代码>当您要停止侦听这些通知时(当对象被解除分配时也应执行此操作)。侦听设置中的更改
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(someMethod:) name:NSUserDefaultsDidChangeNotification object:nil];
一旦此视图控制器不再位于内存中,请记住删除观察者。语法适用于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
}
}
使用“instantWeb”键访问特定于应用程序的布尔类型设置的示例:
在iOS10中,尝试以下操作:
UNUserNotificationCenter.current().getNotificationSettings { (settings) in
// Your code here
}
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")
}
}
}
啊,好吧,有道理。现在我的下一个问题是,如何确定哪些设置已更改?+1。通常,您需要在-init
中添加Observer(或-application:didFinishLaunchingWithOptions:
用于应用程序代理),并在-dealloc
中删除Observer。这比跟踪你注册了多少次要容易得多(如果你添加了两次Observer,那么每次发布通知时都会被调用两次,IIRC)。@Ben没有真正的方法来确定哪些设置被更改,但是如果你查找特定的内容,请在运行通知时尝试存储旧版本,下次再检查一下。现在我遇到了另一个问题。以下是我的流程:1)登录应用程序(导致加载和复制设置(以便稍后比较更改)2)退出应用程序,进入设置,更改设置3)返回我的应用程序,检查设置并与旧设置进行比较,但即使在对standardUserSettings对象调用“同步”后,也不会注意到新设置。哇,很可爱,我刚刚发现,如果你调用synchronize一次,它就不起作用了,但是调用它两次,它就起作用了。我很喜欢Swift 3的语法:NotificationCenter.default.addObserver(self,selector:#selector(self.defaultsChanged),name:UserDefaults.didChangeNotification,object:nil)
有没有一种优雅的方法可以在不到50行的代码中观察设置的变化,并用KVO处理按键数组?
@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")
}
}
}