Обновляйте данные UITableView каждую секунду - PullRequest
0 голосов
/ 22 ноября 2011

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

Я пытался вызывать [my_table_name reloadData] каждую секунду, но метод не вызывает логики в cellForRowAtIndexPath.Как я могу перебрать ячейки UITableView для обновления его содержимого?

ОБНОВЛЕНИЕ : отображаемое время имеет вид 10 days 11:12:49 (каждая ячейка имеет дату истечения срока действия, когда таблицаобновлено, дата истечения срока вычитает текущее время и вычисляет оставшееся время, которое отображается в ячейке)

ОБНОВЛЕНИЕ 2 : есть 2 способа перезагрузить данные.Один вызывает с сервера, другой вызывает только функцию.

- (void)reloadLocal {
  [my_table_name reloadData];
}

, а онлайновый метод:

- (void)reloadFromServer {
  [self parseXML:@"URL here"];
}
- (void)parseXML:(NSString *)URL {
  // read the XML & update a NSArray containing the data
}

метод reloadLocal вызывается следующим образом (в viewDidLoad)

current = [[NSDate date] retain];
[NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(reloadLocal) userInfo:nil repeats:YES];

для метода cellForRowAtIndexPath, вот псевдокоды (слишком длинные для размещения всех строк):

static NSString *identifier = @"CustomCell";
CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:identifier];

NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:identifier owner:nil options:nil];
    for (id currendObj in topLevelObjects) {
        if ([currendObj isKindOfClass:[UITableViewCell class]]) {
            cell = (CustomCell *)currendObj;
            break;
        }
    }
// then insert data to related UIOutlet elements.
NSDate *validUntil = [[NSDate alloc] initWithTimeInterval:diff sinceDate:current];

NSCalendar *sysCalendar = [NSCalendar currentCalendar];
unsigned int unitFlags = NSHourCalendarUnit | NSMinuteCalendarUnit | NSDayCalendarUnit | NSSecondCalendarUnit;

NSDateComponents *conversionInfo = [sysCalendar components:unitFlags fromDate:current toDate:validUntil options:0];

cell.lbl_day.text = [NSString stringWithFormat:@"%d", [conversionInfo day]];
cell.lbl_minute.text = [NSString stringWithFormat:@"%d", [conversionInfo minute]];
cell.lbl_second.text = [NSString stringWithFormat:@"%d", [conversionInfo second]];
cell.lbl_hour.text = [NSString stringWithFormat:@"%d", [conversionInfo hour]];

обратите внимание, что current является экземпляромтекущее время, в типе данных NSDate.

1 Ответ

0 голосов
/ 22 ноября 2011

В итоге я обнаружил, что если я обновлю переменную даты current в reloadLocal, отображение времени будет автоматически обновлено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...