Я разрабатываю приложение для iPhone, которое поддерживает навигацию на основе табуляции с пятью вкладками. Каждая вкладка содержит UITableView, данные которого извлекаются удаленно. В идеале я хотел бы использовать один UIActivityIndicatorView (подвид окна), который запускается/останавливается во время этого удаленного поиска - один раз за вкладку.Почему мой UIActivityIndicatorView отображается только один раз?
Вот как настроить вертушку в AppDelegate:
- (void)applicationDidFinishLaunching:(UIApplication *)application {
[window addSubview:rootController.view];
activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
[activityIndicator setCenter:CGPointMake(160, 200)];
[window addSubview:activityIndicator];
[window makeKeyAndVisible];
}
Поскольку мои закладки были все выполняет функцию похожей, я создал базовый класс, который все ViewControllers моих вкладок наследовать имущество. Вот метод я использую, чтобы сделать удаленного извлечения:
- (void)parseXMLFileAtURL:(NSString *)URL {
NSAutoreleasePool *apool = [[NSAutoreleasePool alloc] init];
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
NSLog(@"parseXMLFileAtURL started.");
[appDelegate.activityIndicator startAnimating];
NSLog(@"appDelegate.activityIndicator: %@", appDelegate.activityIndicator);
articles = [[NSMutableArray alloc] init];
NSURL *xmlURL = [NSURL URLWithString:URL];
rssParser = [[NSXMLParser alloc] initWithContentsOfURL:xmlURL];
[rssParser setDelegate:self];
[rssParser setShouldProcessNamespaces:NO];
[rssParser setShouldReportNamespacePrefixes:NO];
[rssParser setShouldResolveExternalEntities:NO];
[rssParser parse];
NSLog(@"parseXMLFileAtURL finished.");
[appDelegate.activityIndicator stopAnimating];
[apool release];
}
Этот метод вызывается каждым контроллером вида следующим образом:
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
if ([articles count] == 0) {
NSString *path = @"http://www.myproject.com/rss1.xml";
[self performSelectorInBackground:@selector(parseXMLFileAtURL:) withObject:path];
}
}
Это прекрасно работает, пока приложение загружает первый вкладки содержание. Мне представлен пустой стол и прядильщик. Как только содержимое загружается, прядильщик уходит.
Странно, когда я нажимаю вторую вкладку, сообщения NSLog из -parseXMLFileAtURL: метод отображаются в журнале, но экран висит на представлении первой вкладки, и я не вижу счетчика. Как только содержимое будет загружено, появится представление второй вкладки.
Я подозреваю, что это связано с резьбой, с которой я все еще знаком. Я делаю что-то явно неправильно здесь?
Спасибо, Diederik. Я использовал spinner, используя ваш совет, хотя мне потребовалось некоторое время с тех пор, как у меня было еще несколько ошибок. –