2012-02-17 1 views
1

通知センターにオブザーバーを2回(事故によって)追加することができます。通知を2回取得します。 通知を1つだけ取得することはできますか?より洗練されたソリューションをご存知ですか?NSNotificationCenterによりバグが発生する可能性があります。より洗練されたソリューションをご存知ですか?

これはバグにつながる可能性があるため、この例を示します。

- (void)viewDidLoad 
{ 
[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(keyboardDidShow:) 
              name:UIKeyboardDidShowNotification 
              object:nil]; 
[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(keyboardDidShow:) 
              name:UIKeyboardDidShowNotification 
              object:nil]; 
} 

- (void)keyboardDidShow:(NSNotification *)ntf 
{ 
} 
+1

hm ..別の同一のコードを複数回書くと、バグにつながる可能性があります。 – beryllium

答えて

1

は、あなたはそれが存在する場合は(オブザーバー

[[NSNotificationCenter defaultCenter] removeObserver:self name:aName object:nil]; 
[[NSNotificationCenter defaultCenter] addObserver:self selector:aSelector name:aName object:nil]; 

この方法では、古いものを削除するを追加している次のコードを毎回使用することができます)、新しいものを追加します。

これは100%耐故障ではありませんが、それはスタートです。呼び出しが非同期または他の独自の状況になっているマルチスレッドアプリケーションでは、これが失敗する可能性があります。

1

オブジェクトをnilに設定し、後でそのオブジェクトを有効なものとして使用することもできます。

すべてがフェールセーフにすることはできません。あなたはどこか別のオブザーバを追加した場合、あなたがわからない場合は

関連する問題