2014-12-08 2 views
0

Я пытаюсь реализовать индикатор активности при анализе данных XML.Данные не загружаются в UITableView после разбора в фоновом режиме

Я нашел это Activity indicator (spinner) with UIActivityIndicatorView и попробовал его. Однако, поскольку я использую performSelectorInBackground, когда он заканчивает разбор, ни один из данных не появляется в моем представлении таблицы.

Я попытался [self.tableview reloadData], и я пробовал [self.view setNeedsDisplay], однако ничего не работает.

Если я оставлю представление и вернусь к нему, все данные появятся в ячейках таблицы.

Любые идеи?

+0

Что вы пробовали? Как вы добавляете данные в представление таблицы? Можете ли вы показать весь связанный код? – KerrM

+0

вы должны посмотреть 'performSelectorOnMainThread' – sage444

+0

@KerrM. Весь мой разбор и получение RSS-канала происходит в файле, который я импортирую в свой контроллер. На мой взгляд, контроллер, я делаю это: 'self.rssNews = [[ParseRSSNews Alloc] initWithUrl: self.url];' В методе initWithUrl в файле анализатора, я сделал это: '[само performSelectorInBackground: @selector (parseXMLFileAtURL :) withObject: URL]; ' как только это будет сделано, разбор я сделал: ' [само performSelectorOnMainThread: @selector (doneParsing) withObject: ноль waitUntilDone: NO]; ' , когда я распечатать сколько элементов в моем self.rssNews (в контроллере), что он показывает 0. Таким образом, он не возвращает данные. –

ответ

1

Вы должны позвонить

[self.tableview reloadData] 

в основнойнить (вы можете проверить в Wich нить you'r в с [NSThread isMainThread])

вы можете сделать

[UIApplication sharedApplication].networkActivityIndicatorVisible = YES; 
//create background queue 
dispatch_queue_t backgroundQueue = dispatch_queue_create("com.mycompany.myqueue", 0); 
//dispatch in background 
dispatch_async(backgroundQueue, ^{ 
     //execute long operation in background thread 
     self.rssNews = [[ParseRSSNews alloc] initWithUrl:self.url]; 
    //dispatch in main thread after long operation is finish 
    dispatch_async(dispatch_get_main_queue(), ^{ [self.tableView reloadData]; }); 
}); 
+0

Поскольку мой разбор и получение RSS-канала происходит в отдельном файле, у меня нет доступа к self.tableview. Я смог сделать это на моем контроллере: '[UApplication sharedApplication] .networkActivityIndicatorVisible = YES; dispatch_async (dispatch_get_main_queue(),^{ self.rssNews = [[ParseRSSNews Alloc] initWithUrl: self.url]; [self.tableView reloadData]; }); ' Однако индикатор сети не идет пока он разбор. –

+1

Я обновил свой ответ –

+0

Спасибо, Борис! Это помогло LOT !!! Я также добавил, чтобы отключить networkActivityIndicatorVisible во второй dispatch_async(). Снова, оцените всю вашу помощь !!! =) –

Смежные вопросы