2013-04-30 5 views
0

У меня есть мой код для синтаксического анализа:Как сделать обновление моего UILabel в Xcode

NSError* error = nil; 
NSString* text = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://site.ch/parse.php"] 
              encoding:NSASCIIStringEncoding 
              error:&error]; 

Из этого кода я получать название дорожки из URL-адресов радио. Кроме того, я получаю это на мою этикетку:

[labelName setStringValue:text]; 

Вопрос: Как обновить свой лейбл? Я хочу, чтобы мой ярлык обновлялся через 5 секунд с URL-адреса. Я использовал расписание таймера ... но после этого мое приложение стало очень медленным ... помогите пожалуйста.

+0

показать свой код таймера –

ответ

3

Предполагая, что вы просто положили вышеуказанный код в viewDidLoad контроллера вида или аналогичного, вы фактически блокируете основной поток (то есть поток пользовательского интерфейса), заставляя приложение реагировать на количество времени, которое требуется для извлечения строки из файла site.ch/parse.php. Как и было предложено, вы должны загрузить строку в фоновом режиме. Кроме того, изменение интерфейса должно быть сделано на главной теме:

dispatch_queue_t queue = dispatch_get_global_queue(0,0); 
dispatch_async(queue, ^{ 
    NSError* error = nil; 
    NSString* text = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://site.ch/parse.php"] 
             encoding:NSASCIIStringEncoding 
             error:&error]; 

    // checking if error == nil would be appropriate 

    dispatch_async(dispatch_get_main_queue(), ^{ 
     self.labelName.text = text; 
    });  
}); 

Этот пример (мои извинения за любые опечатки) загружает текст из site.ch/parse.php в фоновом режиме и устанавливает метку после завершения. Кроме того, as suggested here было бы неплохо отобразить текст заполнителя при загрузке реального текста.

Кроме того, обратите внимание на performSelector:withObject:afterDelay, если вы хотите это сделать.

+0

Я хотел ответить на этот вопрос, но после прочтения этого ответа нечего сказать +1 –

0

вы должны попытаться использовать фоновый поток или поток GCD для постоянного обновления текста.

+0

Как его сделать? Если это поможет мне в этом. –

+1

обновление чего-то в пользовательском интерфейсе в фоновом потоке? Ты сумасшедший? –

+0

после получения данных выполните селектор в основном потоке после того, как эта метка будет обновлена ​​ –

0

Почему вы не используете какой-либо фоновый поток для получения данных с URL-адреса, и после получения данных вы можете обновить значение метки. Это не должно влиять на производительность вашего приложения.

Смежные вопросы