日々精進

新しく学んだことを書き留めていきます

– addObserverForName:object:queue:usingBlock:で登録したObserverが削除できない

以下のコードで削除しようとしていたが、ブロックを使った場合はこれでは削除できない。

[[NSNotificationCenter defaultCenter] removeObserver:self];

以下のようにObserverを登録するときの返値をインスタンス変数に持っておいて、それをremoveObserverに渡さないといけない。

    NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
    self.observer = [center addObserverForName:CHANGE_STOCK_PRICE_NOTIFICATION object:nil queue:nil usingBlock:^(NSNotification *notification){
        ・・・
    }];
[[NSNotificationCenter defaultCenter] removeObserver:self.observer];

これは使いにくいなぁ。。まあブロック使わない場合よりは読みやすいのでブロック使うけど。