2013-02-23 7 views
0

Я пытаюсь загрузить веб-контент асинхронно. Я не уверен, как обновлять метки/другой контент в моем контроллере представления после вызова метода connectionDidFinishLoading. В приведенном ниже примере я просто пытаюсь обновить метку, чтобы показать, что содержимое загружено. Как мне это сделать? Спасибо!Update View Controller После подключенияDidFinishLoading вызывается

- (void)connectionDidFinishLoading:(NSURLConnection *)connection 
{ 
    NSLog(@"Succeeded! Received %d bytes of data",[responseData 
                length]); 
    NSString *txt = [[NSString alloc] initWithData:responseData encoding: 
    NSASCIIStringEncoding]; 

    label.text = @"DISPLAY THIS WHEN FINISHED"; 
} 

Я сказал, чтобы мой ViewController быть NSURLConnectionDelegate, а затем будет работать метод fetchData от viewDidLoad, а затем использовать данные, вы получите данные для нас, когда она забирается в connectionDidFinishLoading. Кто-нибудь знает, с чего начать? Благодаря!

+0

Каждый вид должен быть обновлен в основном потоке. –

+0

Я думаю, что мой вопрос заключается в том, как обновить этот вид в основном потоке. Почему это было отмечено? – Brandon

+0

Ваш вопрос не очень точный, вы просто спрашиваете, как это сделать без реальной попытки. –

ответ

1

Как Рами правильно указал вам необходимо обновить пользовательский интерфейс в основном потоке, то:

- (void)connectionDidFinishLoading:(NSURLConnection *)connection { 
    NSLog(@"Succeeded! Received %d bytes of data",[responseData length]); 
    NSString *txt = [[NSString alloc] initWithData:responseData 
             encoding: NSASCIIStringEncoding]; 

    NSString *text = @"DISPLAY THIS WHEN FINISHED"; 
    [label performSelectorOnMainThread:@selector(setText:) withObject:text waitUntilDone:NO] 
} 
+1

'connectionDidFinishLoading' вызывается в том же потоке, на котором было запущено соединение, которое в большинстве случаев является основным потоком (в противном случае вам нужно управлять отдельной runloop и т. Д.). Поэтому 'performSelectorOnMainThread', вероятно, не требуется. –

+0

«большинство случаев» и «возможно» в вашем комментарии, основываясь на том, что вы говорите, нет гарантии, что метод будет вызываться в основном потоке с высокой вероятностью? может быть, но не уверенность –

+1

Хорошо, я очень плохо себя зарекомендовал. Я хотел сказать следующее: Использование 'performSelectorOnMainThread' в' connectionDidFinishLoading' необходимо только в том случае, если соединение не было запущено в основном потоке. –

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