У меня проблема с получением UIActivityIndicatorView для отображения при сборе данных с сервера с помощью запроса NSURLConnection.
Запрос, который я считаю асинхронным, т. Е. Запущен в новом потоке. Я скопировал из примера Apple AdvancedTableViewCells. И я запускаю его в XCode в симуляторе iPhone 4.3 на iOS. Я еще не тестировал его на реальном iPhone.
Также я погуглил эту проблему и перепробовал много предложений, но такое ощущение, что я забыл что-то основное. Ниже приведен мой код из класса RootViewController.
Я просто выбираю строку, создаю и добавляю представление активности, запускаю анимацию, а затем создаю объект 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];
}
}
}