2014-02-05 2 views
0

В методе viewDidAppear я инициализировал NSTimer. (self.dayView инициализируется в loadView-методе).UILabel в UITableViewCell не обновляется на NSTimer

- (void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 


    self.timer = [NSTimer scheduledTimerWithTimeInterval:1 
                target:self 
               selector:@selector(reloadTableView) 
               userInfo:nil 
               repeats:YES]; 
} 

- (void)reloadTableView { 
    [self.dayView.tableView reloadData]; 
} 

И мой cellForRowAtIndexPath выглядит следующим образом:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    NSLog(@"cell for row at indexpath called"); 
    MatchEventCell *cell = [tableView dequeueReusableCellWithIdentifier:kCellIdentifier forIndexPath:indexPath]; 
    MatchEvent *event = [self getMatchEventAtIndexPath:indexPath]; 

    NSCalendar *calendar = [NSCalendar currentCalendar]; 
    NSDateComponents *dateComponents = [calendar components:NSHourCalendarUnit|NSMinuteCalendarUnit|NSSecondCalendarUnit 
                fromDate:[NSDate date] 
                toDate:event.startDate 
                options:0]; 

    cell.textLabel.text = [NSString stringWithFormat:@"%d:%d:%d", [dateComponents hour], [dateComponents minute], [dateComponents second]]; 
    NSLog(@"TEXT = %@", cell.textLabel.text); 

    return cell; 
} 

Как я могу проверить этот таймер в тренажере, метка в моей камере не обновляется. Когда я смотрю на NSLog, я вижу, что «TEXT = ...» новое значение, которое установлено в textLabel.

Почему мой ярлык не визуально обновляется, хотя NSLog показывает, что textLabel имеет новый текст?

ответ

0

Всякий раз, когда вы вносите изменения в базовый источник данных, вам необходимо обновить руководство по просмотру таблиц. UITableView's reloadData метод быстрый и неэффективен способ сделать это. Правильный путь:

NSArray *cells = [myTableView visibleCells]; 
NSMutableArray *indexPaths = [[NSMutableArray alloc] init]; 
for (UITableViewCell *cell in cells) { 
    [indexPaths addObject:[myTableView indexPathForCell:cell]]; 
} 
[myTableView reloadRowsAtIndexPaths:indexPaths withRowAnimation:NO]; 
[indexPaths release]; 

Остальные строки, которые не видны будут обновляться один раз прокручивать и они появляются.

Дайте нам знать, если это работает, в противном случае может быть проблема нить ...

+0

не работает для меня .. я уже пытался добавить «performSelectorOnMainThread» -метод, но до сих пор ничего не кажется, будет обновляться. странно, что NSLog сообщает, что метка обновлена, но ничего визуально не изменилось. –

+0

Как я вижу в вашем коде, NSLog не печатает ту же информацию, что и текстовая метка ячейки. Может быть, это проблема? –

+0

Нет. Я изменил этот пример для понимания по умолчанию ... Я отредактировал вопрос, чтобы все было правильно! –

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