2014-02-09 96 views
0

在我的iOS應用程序我要切換主題,以切換所有視圖的主題一下子任何可見的觀點是贊同所謂的「updateTheme」一NSNotificationCenter通知叫這樣的能力:NSNotificationCenter零星崩潰

[[NSNotificationCenter defaultCenter] postNotificationName:@"updateTheme" object:self]; 

但是,當我在一個視圖與自定義集合視圖單元格應用程序崩潰後,該單元收到通知。這是單元格中的所有代碼:

- (void)didMoveToSuperview { 
    if (!isNew) { 
     isNew = YES; 

     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateTheme) name:@"updateTheme" object:nil]; 

     [self updateTheme]; 
    } 
} 

- (void)updateTheme { 
    [UIView animateWithDuration:.5 animations:^{ 
     self.titleLabel.textColor = [Colors boldText]; 
     self.divider.backgroundColor = [Colors darkBorder]; 
    } completion:^(BOOL finished){}]; 
} 

當我註釋掉單元格訂閱通知的行時,應用程序運行正常。否則它崩潰與此錯誤

-[__NSCFType updateTheme]: unrecognized selector sent to instance 0x1775d5d0 

我想不通爲什麼會發生這種情況,任何幫助或建議,將不勝感激。

+2

問題是,通知中心正在發送'updateTheme'到錯誤的對象。這是可能發生的事情,因爲你調用了'addObserver:',但是那個對象不存在,而你忘記調用'removeObserver:'。 – matt

回答

2

正如matt所指出的那樣,我沒有在取消分配時以觀察者身份移除單元格,隨後當通知被觸發時,對象不見了,所以應用程序崩潰了。爲了解決它,我添加了這個:

- (void)dealloc { 
    [[NSNotificationCenter defaultCenter] removeObserver:self]; 
}