UILabel文本没有被更新

我无法更改UILabel文本。 viewDidLoad内的UILabel的代码是:

startLabel=[[UILabel alloc] initWithFrame:CGRectMake(75, 395, 200, 30)]; startLabel.text=@"Recording Sound ..."; startLabel.backgroundColor=[UIColor clearColor]; startLabel.textColor=[UIColor whiteColor]; startLabel.font=[UIFont boldSystemFontOfSize:17]; [self.view addSubview:startLabel]; 

后来,如果我想用下面的代码来更改文本的标签,那么它在应用程序上不会改变:

 startLabel.text=@"Searching Database ..."; 

要么

 [startLabel setText:@"Searching Database ..."]; 

UILabel不是空的,我在debugging过程中打印出来,它显示:

 (gdb) po startLabel <UILabel: 0x2c1a30; frame = (75 395; 200 30); text = 'Searching Database ...'; clipsToBounds = YES; userInteractionEnabled = NO; layer = <CALayer: 0x2ae8f0>> 

所以,标签的文本在UILabel里面改变了,但是在屏幕上没有更新。

任何人都可以让我知道我在这里错过了什么? 谢谢。

编辑1:我试着performSelectorOnMainThread: – 没有为我工作。 编辑2:我使用AVFoundationASIHTTP类来录制声音,并在这里上传录制的文件。 没有其他的。 没有使用任何线程。

您可能会遇到上述注释中提到的线程问题。 如果你有一个方法在主线程上运行,并执行一些活动(例如search数据库),那么在运行循环得到控制之前,对UI进行的更新不会被提交。 因此,如果您在主线程上执行耗时的任务,请在设置标签的文本后运行以下代码:

 - (void)doSomethingTimeConsuming ... consume some time ... ... set text of label ... [[NSRunLoop mainRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.5]]; ... continue long operation ... } 

这应该刷新您所做的任何UI更改。 虽然这可能是一个明智的和function的破解,但它并没有打败替代品。 我强烈build议您在后台线程上执行应用程序的耗时任务,并使用performSelectorOnMainThread:withObject:waitUntilDone:来通过主线程更新UI。 请参阅iOS线程pipe理中的 Apple页面。

在我的情况下,更新的函数是从线程上的触摸识别器调用的,但函数中我正在更改标签文本属性的值的位置放在主线程上:

 dispatch_async(dispatch_get_main_queue(), ^{ [self.someLabel setText:someString]; }); 

我的意见有点意外,虽然是合理的 – 只是没有人想太多。

我应该更新UILabel当我收到一个NSNotification ,我在别的地方解雇了。 但是, 通知是从后台线程触发的,因此即使更新标签文本的侦听器方法也会在后台触发。

如果您依靠NSNotification来更新标签或任何视图,请从主UI线程中触发NSNotification

我有一个UILabel显示一个级别号码,不会更新到一个UIViewController新的级别号码。 我能find的唯一可行的解​​决scheme是在拥有UILabel的视图控制器的主线程上调用setNeedsDisplay

 -(void)changeLevelLabel:(int)theLevel { dispatch_async(dispatch_get_main_queue(), ^{ self.levelLabel.text = [NSString stringWithFormat:@"%d",theLevel]; [self.levelLabel setNeedsDisplay]; }); 

}

请参阅http://iosdevelopmentjournal.com/blog/2013/01/16/forcing-things-to-run-on-the-main-thread/了解更详细的解&#x91CA;