В моем приложении для iPhone у меня есть три вкладки с использованием UITabBarController
. Первая вкладка (которая загружается при запуске приложения) использует для загрузки локальные данные и выполняется очень быстро.
Вторая вкладка, которая загружает XML-файл из Интернета и анализирует его, а затем отображает все данные в виде UITableView
, долго загружается при более медленных соединениях (EDGE, 3G). И поскольку я вызываю свой синтаксический анализатор внутри viewDidLoad
, приложение не переключится на мою вторую вкладку, пока все не будет сделано - это означает, что иногда требуется время для загрузки вкладки, и похоже, что приложение заблокировано.
Я бы предпочел, чтобы пользователь переключился на эту вкладку, сразу загрузил представление, даже если оно пусто, а затем данные были загружены / проанализированы / отображены. У меня вращается счетчик сетевой активности, поэтому, по крайней мере, пользователь может знать, что что-то происходит.
Вот мой текущий viewDidLoad
:
// Load in the latest stories when the app is launched.
- (void)viewDidLoad {
[super viewDidLoad];
NSLog(@"Loading news view");
articles = [[NSMutableArray alloc] init];
NSURL *url = [NSURL URLWithString:@"http://example.com/mobile-app/latest-news.xml"];
NSLog(@"About to parse URL: %@", url);
parser = [[NSXMLParser alloc] initWithContentsOfURL:url];
parser.delegate = self;
[parser parse];
}
Я нашел эту статью, в которой показано, как запускать потоки в фоновом режиме, но я попытался реализовать этот код и не смог заставить фоновый поток загрузить данные обратно в мой UITableView - код был вызван, но как мне убедиться, что проанализированные статьи загружены обратно в мое табличное представление?