ユーザーデフォルトの変更後に関数を呼び出そうとしています。以下は私が使用しているコードです。iOS Swift User Defaults Observerエラーメッセージが受信されましたが、処理されませんでした。
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
//Watch user default changes
UserDefaults.standard.addObserver(self, forKeyPath: "arrayA", options: NSKeyValueObservingOptions.new, context: nil)
UserDefaults.standard.addObserver(self, forKeyPath: "arrayB", options: NSKeyValueObservingOptions.new, context: nil)
}
func observeValueForKeyPath(keyPath: String, ofObject object: AnyObject, change: [NSObject : AnyObject], context: UnsafeMutableRawPointer) {
filterItems()
self.tableView.reloadData()
}
deinit {
UserDefaults.standard.removeObserver(self, forKeyPath: "arrayA")
UserDefaults.standard.removeObserver(self, forKeyPath: "arrayB")
}
コードはthisからインスピレーションを得ました。 Swift 3のために少し修正しました。
ユーザーのデフォルトを更新するアクションを実行すると、アプリケーションがクラッシュし、以下がコンソールに表示されます。
は基本的に私はそれが-observeValueForKeyPath:ofObject:変更:コンテキスト:メッセージは受信されましたが、処理されませんでした。キー
arrayA
またはarrayB
が変更された場合
filterItems()
と
self.tableView.reloadData()
呼びたいです。また、ユーザーのデフォルト設定の変更を呼び出すこともできますが、効率が悪くなります。
observeValueForKeyPathに@objc宣言が必要だと思います。 –
'@ objc func observeValueForKeyPath'を使用すると同じエラーが発生します。あなたが何を意味するのか分からない限り。 –
あなたは確信していますか? (NSKeyValueChangeKey:Any)?、コンテキスト:UnsafeMutableRawPointer?){ print(変更) } – Xingou