2017-12-05 5 views
0

UITableViewCellawakeFromNibが呼び出されるとNSNotificationオブザーバが追加されます。その後、私はremoveFromSuperViewが呼び出されたときにオブザーバーを削除しています。iOS - NSNotificationを受信したときにUITableViewCellのawakeFromNibが呼び出される

- (void)awakeFromNib 
{ 
    [super awakeFromNib]; 

    [self setNotificationObserver]; 

    _vHolder.layer.cornerRadius = 10.0f; 
    _vHolder.layer.shadowColor = [UIColor blackColor].CGColor; 
    _vHolder.layer.shadowRadius = 2.0f; 
    _vHolder.layer.shadowOffset = CGSizeMake(0.0f, 0.0f); 
    _vHolder.layer.shadowOpacity = 0.5f; 
} 

- (void)removeFromSuperview 
{ 
    [super removeFromSuperview]; 

    [self removeNotificationObserver]; 
} 

- (void)setNotificationObserver 
{ 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didReceiveESSMQTTMessageNotification:) name:NOTIF_ESSMQTT_MESSAGE_RECEIVED object:nil]; 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didReceiveDeviceStatesMessageNotification:) name:NOTIF_DEVICE_STATES_RECEIVED object:nil]; 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didReceiveDeviceOnOffStateNotification:) name:NOTIF_DEVICE_ON_OFF_STATE_RECEIVED object:nil]; 
} 

- (void)removeNotificationObserver 
{ 
    [[NSNotificationCenter defaultCenter] removeObserver:self name:NOTIF_ESSMQTT_MESSAGE_RECEIVED object:nil]; 
    [[NSNotificationCenter defaultCenter] removeObserver:self name:NOTIF_DEVICE_STATES_RECEIVED object:nil]; 
    [[NSNotificationCenter defaultCenter] removeObserver:self name:NOTIF_DEVICE_ON_OFF_STATE_RECEIVED object:nil]; 
} 

私はこのUITableViewCell以内に私のボタンや画像の状態をリフレッシュするためにNSNotificationを使用しています。

私が直面している問題は、NSNoticationが受信されるたびにawakeFromNibが呼び出されることです。これは、私のボタンと画像の状態を元の状態にリフレッシュさせる原因になります。 奇妙なことに、私はそれまでにremoveFromSuperviewが呼ばれているのを見たことがありません。

は、だから私の質問は以下のとおりです。

NSNotificationを受信したときに、なぜ awakeFromNibが呼び出さなっている
  1. 私はちょうどawakeFromNibの下にオブザーバを追加しています。UITableViewCellsにはNSNotificationsを観察したいと思うときに正しいことをしていますか? (まあ、私はすべての時間これをやってきました。)

+0

あなたは通知のためにオブザーバーを追加しましたか? –

+0

@MangeshMurheこんにちは、親切にチェックして、私の投稿を編集しました。 –

+0

オブザーバーを削除したいときは? –

答えて

0

あなたのセルがリフレッシュ内容だったが、セルの内容が正常に更新されたとき、あなたはremoveNotificationObserverを呼び出す必要があったスーパー

から削除されていなかったので。

通知の代わりにプロトコルを使用することをお勧めします。

希望のヘルプ。

関連する問題