如何在没有[view setNeedsDisplay]的情况下使用NSNotification刷新视图;

时间:2013-12-26 14:34:38

标签: ios objective-c

我有两个类,一个是 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];除非我遗漏了什么。

非常感谢任何帮助 - 谢谢!

3 个答案:

答案 0 :(得分:1)

您的代码应该有效。

一种可行的解释是,当执行通知处理程序时,self.aReference.moodImage(或self.aReference)是nil。请检查一下。

答案 1 :(得分:0)

也许通知被发送到另一个线程?您可以确保在主线程中完成UI更改。

答案 2 :(得分:0)

你是否在首次调用处理程序时删除了观察者?

尝试删除该行 -

[[NSNotificationCenter defaultCenter] removeObserver:self];

此行将从自我观察的所有通知中删除self。