如何在UILabel中循环显示字符?

我有一个方法,在一个单独的线程上执行一个循环。 由于我的程序工作的原因,我使用这种方法,

[self performSelectorInBackground:@selector(myMethod:) withObject:arg]; 

而实际的方法,

 - (void)myMethod:(NSString *)arg { NSAutoreleasePool *pool = [NSAutoreleasePool new]; for (int i = 0; i < [arg length]; i++) { unichar ch = [arg characterAtIndex:i]; NSLog(@"Processing character %c",ch); NSString *currentChar = [[NSString alloc] initWithFormat:@"%c", ch]; viewController.outputLabel.text = currentChar; [currentChar release]; switch (ch) { //Do my stuff } [pool release]; } 

现在我的问题是,只有最后一个字符被处理得到显示在我的UILabel,但是当我检查我的控制台,而运行程序时,字符正在处理他们正在逐一显示到控制台(使用NSLog )。 这正是我希望看到我的标签上的行为。

另外我应该告诉你,每次我处理一个字符(在switch语句中)至less有一个轻微的延迟,因为我打电话[NSThread sleepForTimeInterval:delayTime]; 至less有几次。

您正试图从主线程以外的线程更新视图(“outputLabel”),这是不允许的。

您需要强制更新从主线程发生。 你可以通过调用来做到这一点

 - (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait 

所以,这样的事情:

 [viewController.outputLabel performSelectorOnMainThread: @selector( setText: ) withObject: currentChar waitUntilDone: YES];