我已經使用iphone的標準root.plist方法創建了自定義設置。我想知道是否有方法來確定用戶何時更改我的應用程序中的這些設置...如何確定何時在ios上進行設置更改
回答
您可以偵聽NSUSerDefaultsDidChange的通知本:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(defaultsChanged) name:NSUserDefaultsDidChangeNotification object:nil];
每當NSUserDefaults更改時,defaultsChanged
將被調用。
當你想停止監聽這些通知時(當對象被釋放時你也應該這樣做),不要忘記調用[[NSNotificationCenter defaultCenter] removeObserver:self];
。
註冊以接收NSUserDefaultsDidChangeNotification
通知。這不是很明顯,但iOS Application Programming Guide把它描述爲這樣:
首選項,您的申請 公開通過設置 應用改變
鏈接已經死了 – Marmoy 2017-02-28 11:57:54
聽在設置
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(someMethod:) name:NSUserDefaultsDidChangeNotification object:nil];
請記住刪除觀察者,一旦這種視圖控制器不再記憶改變。
的語法是斯威夫特2.使用斯威夫特,你會做這樣的事情訂閱的變化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
}
}
Swift 3的語法:'NotificationCenter.default.addObserver(self,selector:#selector(self.defaultsChanged),name:UserDefaults。didChangeNotification,object:nil)' – 2017-07-05 22:54:10
一個例子使用關鍵「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")
}
}
}
在iOS10中,試試這個:
UNUserNotificationCenter.current().getNotificationSettings { (settings) in
// Your code here
}
- 1. ios :: exceptions(...)在設置badbit時進行更改
- 2. 如何獲取綁定以在值更改時進行更新?
- 3. 如何在Silverlight DataGrid更新綁定數據時進行更改?
- 4. 如何在每次創建設置時更改設置
- 5. iOS:如何在屏幕上對控件進行分組,如在設置中?
- 6. 如何在DataContext已設置時進行綁定
- 7. 如何設置AppleScript在給定文件被修改時運行?
- 8. 在iOS設備上,如何檢查日期時間設置
- 9. 在運行時更改CoreNLP設置
- 10. 如何在後臺運行iOS應用程序(iOS 9+)直到用戶更改iOS設備的WiFi設置
- 11. 如何在類的屬性設置或更改設定時間戳在Django
- 12. 如何確定Dropbox是否已安裝在iOS設備上?
- 13. 如何更改或設置您在Android上的GPS位置
- 14. 如何在iOS/iPhone上更改UIButton的位置
- 15. iOS:如何知道設備語言何時更改?
- 16. 如何在MySQL上正確設置utf8mb4?
- 17. 如何更改運行時應用程序設置
- 18. 如何更改3D軸設置在matplotlib
- 19. 如何在項目屬性更改時進行ObservableCollection更新
- 20. 如何在線插件進行更改
- 21. iOS在設置字體改變時正確重新載入tableview
- 22. iOS8如何更改位置與設置和警報進行交互?
- 23. ios如何在特定時間更改圖像
- 24. 如何在iOS上爲iBeacon設置掃描時間間隔?
- 25. 對設置綁定的控件進行回滾更改
- 26. 如何在我的VIM配置中進行此更改?
- 27. 在iOS上更改Admob BannerView的位置
- 28. 如何在默認音頻設備上設置權限,以便可以通過編程方式進行更改?
- 29. 如何更改iOS中的行數UITextField
- 30. 如何在依賴屬性更改時在實體上設置modifiedDate
啊好的,有道理。現在我的下一個問題是,我怎樣才能確定哪些設置發生了變化? – Ben 2010-10-13 21:21:18
+1。通常情況下,您需要在'-init'(或'-application:didFinishLaunchingWithOptions:'爲應用程序委託)和remove-observer在'-dealloc'中添加Observer。這比跟蹤您註冊的次數要容易(如果您添加了兩次觀察器,每次發佈通知時都會調用兩次,IIRC)。 – 2010-10-13 21:21:21
@Ben沒有真正的方法可以確定哪些設置發生了變化,但是如果您尋找特定的內容,請嘗試在通知運行時存儲舊版本,然後再次檢查。 – Emil 2010-10-13 21:34:39