iPhone UILabel не обновляется - PullRequest
       5

iPhone UILabel не обновляется

0 голосов
/ 09 ноября 2010

Я знаю, что существует множество похожих вопросов, но ни один из ответов, похоже, не решает мою проблему.У меня есть приложение, которое использует NSURLConnection для загрузки файла, а затем выполняет некоторые вычисления для загруженного файла.Я настроил UILabel для отображения текущего состояния загрузки (например: «Загрузка файла», «Анализ файла»).Я обновляю UILabel в функции didReceiveResponse и connectionDidFinishLoading делегата NSURLConnection, а также в некоторых других местах моего кода.Я обновляю его, вызывая следующую функцию:

[self performSelectorOnMainThread:@selector(updateProgress) withObject:nil waitUntilDone:NO]

где - (void) updateProgress - это функция, которую я определил для вызова [theLabel setNeedsDisplay].Я NSLog'd его, как

NSLog(@"theLabel: %@\n",theLabel.text);

и информация обновляется правильно, но на самом деле метка не обновляется в представлении.Кроме того, updateProgress вызывается только после того, как все загружено.Он обновляет ярлык THEN, что вряд ли полезно.Есть предложения?

1 Ответ

2 голосов
/ 09 ноября 2010

NSURLConnection блокирует основной поток (обновления не будут выполняться для представления до его завершения).

Вы можете выполнить updateProgress в фоновом режиме:

[self performSelectorInBackground:@selector(updateProgress) withObject:nil]

первая строка updateProgress должна быть:

NSAutoReleasePool *pool = [[NSAutoReleasePool alloc]init];

Последние строки должны быть:

[pool release];
pool = nil;

http://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSAutoreleasePool_Class/Reference/Reference.html

Конечно, вы также можете выполнитьNSURLConnection в фоновом режиме.Затем вы можете обновить метку в главном потоке.

...