私の iPhone アプリでは、UITabBarController
. 最初のタブ (アプリの起動時に読み込まれる) はローカル データを使用して読み込まれ、非常に高速です。
ただし、Web から XML ファイルをダウンロードして解析し、すべてのデータを に表示する 2 番目のタブは、UITableView
低速の接続 (EDGE、3G) ではロードに時間がかかります。また、 内でパーサーを呼び出しているためviewDidLoad
、すべてが完了するまでアプリは 2 番目のタブに切り替わりません。つまり、タブの読み込みに時間がかかることがあり、アプリがロックされているように見えます。
ユーザーにそのタブに切り替えてもらい、空の場合でもすぐにビューをロードしてから、データをダウンロード/解析/表示できるようにしたいと考えています。ネットワーク アクティビティ スピナーが回転しているので、少なくともユーザーは何かが起こっていることを知ることができます。
これが私の現在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 にロードし直すことができませんでした。コードは呼び出されましたが、解析された記事はテーブル ビューに読み込まれますか?