我有两个类,一个是 UIViewController ,一个是 UITableViewCell ,名为 MoodViewController 和 TableViewCell 。
MoodViewController 有一个图片视图,每当 UISwitch 状态发生变化时,我想刷新一下。我发布了关于交换机状态更改的通知,并且正在接收通知。但是,我无法弄清楚在通知处理程序中使用哪些代码,这将允许我自动刷新图像视图。我尝试了 [myImageViewName setNeedsDisplay]; 但是,收到通知后,我似乎无法刷新视图。
我目前用于处理通知的代码如下:
-(void)handleNotification:(NSNotification *)notification {
NSUserDefaults *standardDefaults = [NSUserDefaults standardUserDefaults];
if ([[standardDefaults stringForKey:@"switchKey"] isEqual: @"On"]) {
self.aReference.moodLabel.text = @"Happy";
self.aReference.moodImage.image = [UIImage imageNamed: _array1[0]];
[self.aReference.moodImage setNeedsDisplay];
}
else {
self.aReference.moodImage.image = nil;
[self.aReference.moodImage setNeedsDisplay];
}
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
注意:我正在尝试刷新不属于表的图像视图,所以请不要建议[tableViewName reloadData];除非我遗漏了什么。
非常感谢任何帮助 - 谢谢!
答案 0 :(得分:1)
您的代码应该有效。
一种可行的解释是,当执行通知处理程序时,self.aReference.moodImage
(或self.aReference
)是nil
。请检查一下。
答案 1 :(得分:0)
也许通知被发送到另一个线程?您可以确保在主线程中完成UI更改。
答案 2 :(得分:0)
你是否在首次调用处理程序时删除了观察者?
尝试删除该行 -
[[NSNotificationCenter defaultCenter] removeObserver:self];
此行将从自我观察的所有通知中删除self。