У меня есть несколько ячеек таблицы, показывающих разное время.Я хочу, чтобы время обновлялось (точно так же, как обратный отсчет).
Я пытался вызывать [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
.