gpt4 book ai didi

ios - UserDefaults.didChangeNotification 未触发

转载 作者:行者123 更新时间:2023-12-01 19:43:54 26 4
gpt4 key购买 nike

我正在处理的项目有一个将数据写入 UserDefaults 的扩展。然后在包含的应用程序中,UI 应该根据更改进行更新。问题是 UserDefaults.didChangeNotification除非屏幕来自背景,否则不会被触发。可能是什么原因,有没有办法修复或其他方式来获得所需的更新?

在扩展中写入数据:

let sharedUserDefaults = UserDefaults(suiteName: Common.UserDefaultsSuite)
var receivedNotifications = sharedUserDefaults?.array(forKey: Common.ReceivedNotifications)
if receivedNotifications != nil {
receivedNotifications?.append(aData)
} else {
receivedNotifications = [aData]
}
sharedUserDefaults?.set(receivedNotifications, forKey: Common.ReceivedNotifications)

在 View Controller 中注册通知:
override func viewDidLoad() {
super.viewDidLoad()

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

}

并使用更改的用户默认值(实际上没有被调用):
@objc func userDefaultsDidChange(_ notification: Notification) {

print("User defaults did change")
gatherReceivedNotifications()

}

最佳答案

仍然不知道为什么其他方式不起作用,但以下方法有效,所以这是一个解决方案。根据建议 here我做了以下事情:

override func viewDidLoad() {
super.viewDidLoad()

UserDefaults(suiteName: Common.UserDefaultsSuite)?.addObserver(self, forKeyPath: Common.ReceivedNotifications, options: .new, context: nil)

}

然后实现 observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) :
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
if keyPath == Common.ReceivedNotifications {
gatherReceivedNotifications()
}
}

它会立即被触发,并且只有在对键 Common.ReceivedNotifications 的 UserDefaults 进行更改时才会触发它。制作。

关于ios - UserDefaults.didChangeNotification 未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51170690/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com