即使在dispatch_async上,UILabel也不会更新

时间:2013-06-08 14:04:10

标签: ios uilabel grand-central-dispatch performselector dispatch-async

为什么我的标签不会更新?

- (void)setLabel:(NSNotification*)notification {
    dispatch_async(dispatch_get_main_queue(), ^{
        NSLog(@"setLabel");
        [self.label setText:@"My Label"];
    });
}

我也尝试过使用performSelectorOnMainThread无济于事。

请注意,setLabel会显示在日志中。

其他信息:

我还有两个其他功能可以做同样的事情,但只有不同的文字。另外两个函数没有dispatch_async,但它们都有效。此外,两个工作函数的通知由NSURLConnection发送(this post中的方法#2)。虽然上面的非工作函数的通知是通过调用FBRequestConnection发送的(参见this post)。

为清楚起见,我的其他两个工作职能如下:

- (void)setLabel2:(NSNotification*)notification {
    NSLog(@"setLabel2");
    [self.label setText:@"My Label 2"];
}    
- (void)setLabel3:(NSNotification*)notification {
    NSLog(@"setLabel3");
    [self.label setText:@"My Label 3"];
}

是的,我确实尝试在我的代码中删除dispatch_async。事实上,最初没有dispatch_async,因为其他两个都在工作。

1 个答案:

答案 0 :(得分:3)

如果您在设置文本和打印描述self.label后立即设置断点,它是否显示文本已更改?如果是这样,它必须在此方法触发后重置到其他位置。如果self.label为零而不是你的问题