1. ホーム
  2. objective-c

[解決済み] オブジェクトにキー・バリュー・オブザーバーが付属しているかどうかを判断するにはどうすればよいですか?

2022-05-15 22:59:34

質問

objective c オブジェクトにキーパスの removeObservers: を指示し、そのキーパスが登録されていない場合、Sads をクラックしてしまいます。

'Cannot remove an observer for the key path "theKeyPath" from because it is not registered as an observer.'(オブザーバーとして登録されていないため、キーパスのオブザーバーを削除できません。

オブジェクトが登録されたオブザーバを持っているかどうかを判断する方法はありますか。

if (object has observer){
  remove observer
}
else{
  go on my merry way
}

どのように解決するのですか?

removeObserver の呼び出しを try catch で囲んでください。

@try{
   [someObject removeObserver:someObserver forKeyPath:somePath];
}@catch(id anException){
   //do nothing, obviously it wasn't attached because an exception was thrown
}