В моем приложении для 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 - код был вызвал, но как мне убедиться, что проанализированные статьи загружаются обратно в мое табличное представление?