在viewDidAppear方法中,我初始化了一个NSTimer。 (self.dayView在loadView方法中初始化。)
- (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 :(得分: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];
滚动后会显示其余不可见的行。
让我们知道这是否有效,否则可能是线程问题......