发生NSNotification时如何更改UILabel属性

时间:2014-07-15 14:11:10

标签: ios events uiview uiviewcontroller nsnotificationcenter

我在互联网和书本上随处可见,但我无法找到解决问题的方法,这看起来非常愚蠢!

我有一个后台线程的应用程序,用于检查iPhone是否已连接。当连接状态发生变化时,线程会在通知中心触发NSNotification,并且mainviewcontroller会监听它。 当事件发生时,调用通知中心上注册的mainviewcontroller选择器,并使控制台操作完美地运行。

这就成了问题,如果我要更改标签或与视图进行一些交互,则忽略对uiview元素的所有调用。我已尝试使用uiview动画块来更改alpha或调用setNeedsDisplay但没有办法与视图互动。

我该怎么做?

NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];

[nc addObserver:self 
    selector:@selector(changedOnlineStatus:) 
    name:@"onlineStatus" 
    object:nil];

-(void)changedOnlineStatus:(NSNotification*)notification
{
    NSDictionary* note = (NSDictionary*)[notification userInfo];

    NSString* onlineStat = (NSString*)[note objectForKey:@"isOnline"];
    if([onlineStat isEqualToString:@"YES"])
    {
        offlineLabel.alpha=1;
    }
    else
    {
        offlineLabel.alpha=1;
    }
}

1 个答案:

答案 0 :(得分:2)

听起来像问题就是线程。您应该只更新主线程中的UI元素而不是后台线程。尝试将调用分派给主线程:

dispatch_async(dispatch_get_main_queue(), ^{

    offlineLabel.alpha=1;
});