我认为问题在于该方法aTime
在您的视图控制器中,当您进入另一个视图时,该视图控制器被释放并且您不能再执行选择器 aTime 了。
所以我建议你把你的aTime
方法和i
一个单例(或任何当你进入另一个视图时不会被释放的对象)设置为你的计时器的目标。
你也应该在你的视图控制器中保留代码,这样当你回到这个视图时你可以正确地更新你的标签。
-(void)viewDidLoad
{
NSTimer *aTimer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(aTime) userInfo:nil repeats:YES];
}
-(void)aTime
{
NSLog(@"....Update Function Called....");
Label.text = [NSString stringWithFormat:@"%d",theSingleton.i];
}
更好的选择:
您可以将 i 声明为单例的属性,然后将观察者添加到 i,然后您将按时更新标签。当你想计算时间时调用 -startTimer。
单身人士:
@interface Singleton
@property (nonatomic,retain) NSNumber *i;
@end
@implementation
+(Singleton*)instance
{
//the singleton code here
}
-(void)startTimer
{
NSTimer *aTimer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(aTime) userInfo:nil repeats:YES];
}
-(void)aTime
{
NSInteger temp = [i integerValue];
temp ++;
self.i = [NSNumber numberWithInteger:temp];
}
视图控制器:
-(void)viewDidLoad
{
[super viewDidLoad];
[[Singleton instance] addObserver:self forKeyPath:@"i" options:NSKeyValueObservingOptionNew context:NULL]];
}
- (void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary *)change
context:(void *)context
{
NSLog(@"....Update Function Called....");
Label.text = [NSString stringWithFormat:@"%@",[Singleton instance].i];
}