如何显示字符以一个UILabel通过他们,我循环?(How do I display charact

2019-10-28 20:44发布

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

[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语句)时有一个至少有轻微的延迟,因为我打电话[NSThread sleepForTimeInterval:delayTime]; 至少几次。

Answer 1:

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

你需要给力的更新从主线程的情况发生。 您可以通过调用做到这一点

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

所以,这样的事情:

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


文章来源: How do I display characters to a UILabel as I loop through them?