Cocoa Touch - отображайте индикатор активности при загрузке вида Uitabbar

StackOverflow https://stackoverflow.com/questions/4497799

Вопрос

У меня есть приложение Uitabbar с двумя представлениями, которые загружают большие объемы данных из Интернета в их методах "ViewWillAppear". Я хочу показать панель прогресса или индикатор деятельности во время получения этих данных, чтобы убедиться, что пользователь знает, что приложение не заморожено.

Я знаю, что об этом спрашивали ранее. Мне просто нужно некоторое разъяснение о том, что кажется скорее хорошее решение.

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

С помощью исследований я обнаружил, что мне нужно перенести весь свой извлечение тяжелых данных в фоновую ветку, так как все обновление пользовательского интерфейса происходит в основной теме.

Если бы кто -то был бы таким любезным, чтобы привести пример для меня, я был бы очень благодарным. Я могу предоставить части своего существующего кода по мере необходимости.

Это было полезно?

Решение

Если вы используете NSURLConnection, он автоматически работает на другом потоке.

В вашем ViewDidload:

NSURLRequest *req = [NSURLRequest requestWithURL:theURL];
NSURLConnection *conn = [NSURLConnection connectionWithRequest:req delegate:self];

Тогда вам нужны индивидуальные методы. Если вы вводите -connection И нажмите ESC, вы увидите все различные методы, которые вы можете использовать. Есть три, которые вам понадобятся с этим:

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
    // this is called when there is a response
        // if you're collecting data init your NSMutableData here
}

-(void) connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
    // each time the connection downloads a 
        // packet of data it gets send here
        // so you can do [myData appendData:data];
} 

- (void) connectionDidFinishLoading:(NSURLConnection *)connection {
        // the connection has finished so you can 
        // do what you want with the data here
}

Это в основном все, что есть для этого. NSURLConnection обрабатывает все многопоточные чтения, и вам не нужно беспокоиться. Теперь вы можете создать индикатор активности и отобразить его, и он будет работать, потому что основной поток пуст. :)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top