Загрузка изображения заголовка UITableView с использованием GCD

Я использую GCD для загрузки изображения заголовка для UITableView.

Когда я использую dispatch_async, изображение вообще не отображается, а когда я использую dispatch_sync, это все еще синхронная загрузка. Как я могу это исправить ?

eventDetailsTable = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height) style:UITableViewStyleGrouped];
eventDetailsTable.dataSource = self;
eventDetailsTable.delegate = self;

[self.view addSubview:eventDetailsTable];

NSString *headerImageUrl = [NSString stringWithFormat:@"%@%@", [currentEvent objectForKey:@"baseurl"], [currentEvent objectForKey:@"sessionimage"]];
NSURL *headerImageURL = [NSURL URLWithString:headerImageUrl];

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
    NSData *imageData = [[NSData alloc] initWithContentsOfURL:headerImageURL];
    UIImage *headerImage = [UIImage imageWithData:imageData];
    UIImageView *headerImageView = [[UIImageView alloc] initWithImage:headerImage];
    eventDetailsTable.tableHeaderView = headerImageView;
});

person Ashish Agarwal    schedule 19.04.2013    source источник


Ответы (1)


Когда вы обновляете пользовательский интерфейс, вы должны делать это в основном потоке. Итак, вот решение:

dispatch_async(global_queue, ^{
    //Do your work

    dispatch_async(dispatch_get_main_queue(), ^{
        //Update UI
    });

});
person hrchen    schedule 19.04.2013
comment
Я пробовал это. В симуляторе работает, а на устройстве только 50% времени - person Ashish Agarwal; 19.04.2013