RSS フィードからデータを読み込んで、タイトルをUITableview
. を使用してBlockRSSParser
、必要なフィールドをすばやく取得しています-ここ
NSLog
データがいつ受信されたかを追跡するために使用しています。UITableView
がデータを受信してから表示するまでに、約 20 秒かかります。
これが私のコードです:
- (void)viewDidLoad
{
[super viewDidLoad];
[self setTitle:@"Loading..."];
[MBProgressHUD showHUDAddedTo:self.view animated:YES];
NSURLRequest *req = [[NSURLRequest alloc] initWithURL:[NSURL URLWithString:@"http://blog.stackoverflow.com/feed/"]];
[RSSParser parseRSSFeedForRequest:req success:^(NSArray *feedItems) {
[self setTitle:@"Blogs"];
[self setDataSource:feedItems];
[self.tableView reloadData];
RSSItem *item = [dataSource objectAtIndex:2];
NSLog(@"loaded cell %@", [item title]);
} failure:^(NSError *error) {
[MBProgressHUD hideHUDForView:self.view animated:YES];
}];
}
このコードのコメントに注目してください。すぐに実行され、ブログ投稿のタイトルの 1 つが表示されます。
しかし、次の 20 秒間は何も表示されず、最終的に次のメソッドが開始されます。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
[MBProgressHUD hideHUDForView:self.view animated:YES];
RSSItem *item = [dataSource objectAtIndex:indexPath.row];
NSLog(@"loaded cell %@", [item title]);
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:item.title];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:item.title];
}
// Configure the cell...
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
NSString *theTitle = [item title];
cell.textLabel.text = theTitle;
return cell;
}
このコードのコメントは 20 秒後に実行されます。この大幅な遅延の背後にある理由は何ですか? さまざまなサイトのさまざまなフィード URL を使用してみました。それでも同じ出力です。