0

そのため、tableViewControllerにこのコードを挿入しました。私の考えは、ダウンローダーと呼ばれる別のスレッドを使用して、メインスレッドに影響を与えないデータをダウンロードすることです。

- (void)viewDidLoad
{
    [super viewDidLoad];
    dispatch_queue_t downloadQueue = dispatch_queue_create("downloader", NULL);
    dispatch_async(downloadQueue, ^{
        self.bandList = [self.fetchData fetchBandList];
        NSLog(@"done");
        [self.tableView reloadData];
        NSLog(@"reloadDone?");
    });
    dispatch_release(downloadQueue);
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSLog(@"WT..?");
    static NSString *CellIdentifier = @"Band List";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    // Configure the cell...
    cell.textLabel.text = [[self.bandList objectAtIndex:indexPath.row] objectForKey:@"itemname"];

    return cell;
}

ただし、有線の遅延があります。私のログでは、「done」と「reloadDone?」tableViewControllerにアクセスするとすぐに表示されますが、「WT ..?」6秒後に表示されます!それはとても有線です!誰かがこれから私を助けることができますか?

4

1 に答える 1

1

UIの更新は、メインキューで行う必要があります

dispatch_async(downloadQueue, ^{
        self.bandList = [self.fetchData fetchBandList];
        NSLog(@"done");
        dispatch_async(dispatch_get_main_queue(),^{[self.tableView reloadData];});
        NSLog(@"reloadDone?");
    });
于 2012-07-13T19:19:47.230 に答える