在我的iOS应用程序中,我可以切换主题,以便立即在所有视图中切换主题任何可见视图都订阅了名为“updateTheme”的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
我无法弄清楚为什么会发生这种情况,我们将不胜感激任何帮助或建议。
答案 0 :(得分:2)
正如matt所指出的那样,我在解除分配时没有以观察者的身份移除单元格,随后当通知被触发时,对象消失,因此应用程序崩溃了。为了解决这个问题,我添加了这个:
- (void)dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self];
}