UIActivityIndicator в UITableViewCell не отображается на setSelected

У меня есть небольшая проблема, которая, кажется, преследует меня. Мой подкласс UITableViewController загружает данные асинхронно при выборе элемента TableViewCell. так...

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
NSLog(@"clickROW");

itemData *selectedItemData;;

selectedItemData = [[[DataManager sharedDataManger]getAllDataItems] objectAtIndex:indexPath.row];

[[DataManager sharedMischaManager] loadDataItemDetailsAsync:selectedItemData.Now];

Хорошо, пока все хорошо, loadDataItemDetailsAsync публикует уведомление после завершения загрузки. Затем мой подкласс UITableViewController получает правильное уведомление, создает новое представление и помещает его в свой NavigationController.

пока все работает нормально...

но, поскольку асинхронная загрузка может занять некоторое время (в зависимости от текущей пропускной способности), я хочу, чтобы UIActivityIndicatior отображался/анимировался во время загрузки.

Итак, я сделал следующее (в моем подклассе UITableViewCell)

- (void)setSelected:(BOOL)selected animated:(BOOL)animated {

[super setSelected:selected animated:animated];

// Configure the view for the selected state


if(selected)
{
    [self.contentView bringSubviewToFront:loader];
    [tvImageView setHidden:YES];
    [loader setHidden:NO];
    [loader startAnimating];
    //[loader performSelectorInBackground: @selector(startAnimating) withObject: nil];      
}
else {
    //[loader performSelectorInBackground: @selector(stopAnimating) withObject: nil];   
    [loader stopAnimating];
    [loader setHidden:YES];
    [tvImageView setHidden:NO];

}

}

я пробовал оба способа "запустить загрузчик", performSelectorInBackGround и простой [loader startAnimating]. ни один из них действительно не работает.

интересно, что tvImageView тоже не скрывается.

Думаю, я пропускаю базовый шаг (что-то вроде перерисовки/повторного отображения, я не знаю). Кажется, я просто не могу понять это сам :(

любая помощь, советы, подсказки очень ценятся

ваше здоровье

Сэм


person samsam    schedule 06.02.2010    source источник


Ответы (1)


Если вы используете Core Data (даже с простой базой данных в памяти, если вам не нужно сохранять данные на диск) в сочетании с NSFetchedResultsController, вам не нужно заниматься всем управлением состоянием.

Вы просто вносите изменения в объекты, а затем NSFetchedResultsController уведомляет делегата (который должен реализовать ваш UITabelViewController) о любых измененных объектах. В этом делегате вы просто вносите изменения в UITableViewCell, например, показ/скрытие индикатора активности или текста состояния.

Все это с помощью простого и формального протокола.

См. справочник протокола NSFetchedResultsControllerDelegate. хороший обзор.

person Stefan Arentz    schedule 06.02.2010
comment
ну, я не использую основные данные .. к сожалению - person samsam; 17.12.2010