iOS アプリの KVO に問題があります。私はそれを正しく理解できないようです。私がやろうとしていること:
グローバル値を監視 (および表示) する MenuViewController (Facebook アプリのように左側で表示可能) があります。いくつかの異なるアプローチを試みましたが、私のアプリは常にクラッシュします (さまざまな時点で、さまざまな理由で)。以下にそれらについて説明します。
注: [object addObserver:self forKeyPath:@"name" options:NSKeyValueObservingOptionNew context:nil]
MenuViewController をオブザーバーとして登録し、登録解除するために使用してい[object removeObserver:self forKeyPath:@"name" context:nil]
ます。
シナリオ 1:
o-viewWillAppear
メソッドにオブザーバーとして登録し、removeObserver コードを に入れました-viewWillDisappear
。o 値が変更され、rootViewController が完全に変更されると、「割り当て解除されたインスタンスにメッセージが送信されました」というエラーが表示されます。したがって、MenuViewController はまだオブザーバーとして登録されていると思います。
シナリオ 2:
o その結果、removeObserver
コードを dealloc 関数に入れました (後でそのaddObserver
部分を viewDidLoad に移動しました) o 別のエラーが発生しました: キー パス "name" のオブザーバーを <...> から削除できないため、登録されていません。オブザーバーとして。
それで、誰かが私の問題とKVOを正しい方法で行う方法についてのヒントを教えてくれるかもしれません. 残念ながら、ドキュメントはこれまでのところ役に立ちませんでした。
ありがとう!