Как отобразить символы в UILabel, когда я их перебираю? - PullRequest
0 голосов
/ 12 ноября 2010

У меня есть метод, который выполняет цикл в отдельном потоке. По причинам, которые работают для моей программы, я называю этот метод, используя

[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]; хотя бы пару раз.

1 Ответ

5 голосов
/ 12 ноября 2010

Вы пытаетесь обновить представление (вашу «outputLabel») из потока, отличного от основного потока, и это недопустимо.

Необходимо принудительно выполнить обновление из основного потока.Вы можете сделать это, позвонив по номеру

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

, примерно так:

[viewController.outputLabel performSelectorOnMainThread: @selector( setText: ) withObject: currentChar waitUntilDone: YES];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...