使实例化的NSTimers无效

时间:2014-04-18 16:18:53

标签: ios objective-c nstimer

我有一个由UIScrollView填充的UILabelsNSTimers正在每个页面上NSDictionary进行更新,for (id key in _infoDict) { NSTimer *releaseDateTimer = [NSTimer scheduledTimerWithTimeInterval: 1.0 target: self selector: @selector(calculateReleaseDate:) userInfo: dateInfo repeats: YES]; [self.releaseDateTimer fire]; }

-(void)calculateReleaseDate:(NSTimer*)theTimer {

        NSString *monthString = [[NSString alloc]initWithFormat:@"%i",[finalDate month]];
        NSString *dayString = [[NSString alloc]initWithFormat:@"%i",[finalDate day]];
        NSString *hourString = [[NSString alloc]initWithFormat:@"%i",[finalDate hour]];
        NSString *minutesString = [[NSString alloc]initWithFormat:@"%i",[finalDate minute]];
        NSString *secondsString = [[NSString alloc]initWithFormat:@"%i",[finalDate second]];

        UILabel *monthValue = (UILabel*)[self.scrollView viewWithTag:[monthTag intValue]];
        [monthValue setText:monthString];

        UILabel *dayValue = (UILabel*)[self.scrollView viewWithTag:[dayTag intValue]];
        [dayValue setText:dayString];

        UILabel *hourValue = (UILabel*)[self.scrollView viewWithTag:[hourTag intValue]];
        [hourValue setText:hourString];

        UILabel *minValue = (UILabel*)[self.scrollView viewWithTag:[minTag intValue]];
        [minValue setText:minutesString];

        UILabel *secValue = (UILabel*)[self.scrollView viewWithTag:[secTag intValue]];
        [secValue setText:secondsString];

}

正在刷新的UILabel全部由其标签引用,这些标签基于它们所在的页面和哪个日历单元。

UIScrollView

这不是完整的方法,但你明白了。 现在,我希望通过删除所有[NSTimer invalidate];子视图然后重新填充它来重建整个页面。

这就是我的问题所在,我的标签值在数字之间跳跃。 我只能假设我以前创建的计时器仍然存在仍然访问这些标签的实例。

有没有办法在runloop上访问定时器并在其上运行{{1}},或者我认为这一切都错了。

任何意见都会受到赞赏。

1 个答案:

答案 0 :(得分:0)

您可以在for循环中的NSMutableArray中添加NSTimer实例。然后,如果它们在另一个for循环中仍然有效,则可以使它们无效。您可以使用isValid方法检查NSTimer是否仍然有效。