#ios #nsurlconnection #uiactivityindicatorview
#iOS #nsurlconnection #uiactivityindicatorview
Вопрос:
У меня проблема с отображением UIActivityIndicatorView, когда я собираю данные с сервера с помощью запроса NSURLConnection.
Запрос, я думаю, является асинхронным, то есть запущен в новом потоке. Я скопировал из примера AdvancedTableViewCells от Apple. И я запускаю его в XCode в симуляторе iOS 4.3 для iPhone. Я еще не тестировал это на реальном iPhone.
Также я погуглил эту проблему и перепробовал множество предложений, но такое ощущение, что я забыл что-то основное. Ниже приведен мой код из класса RootViewController.
Я просто выбираю строку, создаю и добавляю activityview, запускаю анимацию, а затем создаю объект NSURLConnection, который, я полагаю, начинает извлекать данные с сервера в другом потоке.
Есть идеи?
@interface RootViewController : UITableViewController {
NSMutableData *receivedData;
UIActivityIndicatorView *activityView;
}
@end
...
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
// In my rootviewcontroller
activityView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
[self.view addSubview:activityView];
[activityView startAnimating];
…
NSMutableURLRequest *tUrlRequest = [tQuery createUrlRequest:tStatId];
NSURLConnection *tConnectionResponse = [[NSURLConnection alloc] initWithRequest: tUrlRequest delegate: self];
if (!tConnectionResponse) {
NSLog(@"Failed to submit request");
} else {
NSLog(@"Request submitted");
receivedData = [[NSMutableData data] retain];
}
return;
}
...
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
NSLog(@"Succeeded! Received %d bytes of data",[receivedData length]);
NSXMLParser *tParser = [[NSXMLParser alloc] initWithData: receivedData];
...
[tParser parse];
...
[connection release];
[receivedData release];
[NSThread sleepForTimeInterval: 2.0]; // Just to see if activity view will show up...
NSUInteger row = 1;
if (row != NSNotFound)
{
// Create the view controller and initialize it with the
// next level of data.
VivadataTViewController *vivaViewController = [[VivadataTViewController alloc] init];
if (activityView != nil) {
[activityView stopAnimating];
}
}
}
Комментарии:
1. Извините… это был белый avtivityview на белом фоне. Ужасно извиняюсь.
2. здорово, что вы решили эту проблему. однако, если вы ответите на свой собственный вопрос и примете ответ, поток будет помечен как «отвеченный», и другие также могут извлечь из этого выгоду.
Ответ №1:
Возникла точно такая же проблема, попробуйте изменить цвет UIActivityIndicatorView в инспекторе атрибутов -> Style на серый