以下方法会导致崩溃。UI 就像一个按钮,它处理 NSTimer 的启动/停止功能。如果计时器运行,则更新 UILabel。使用 viewDidLoad 方法使我的计时器工作,停止它也工作,但再次启动它会使应用程序崩溃。
删除 viewDidLoad 方法中的 alloc 并尝试使用开始按钮会立即导致崩溃。连theNSLog(@"Start now");
都不叫。
代码:
- (void)tick {
NSLog(@"tick");
float value = [moneyLabel.text floatValue];
moneyLabel.text = [NSString stringWithFormat:@"%f", value + 1.0];
}
- (IBAction)startStopButtonClicked:(UIButton *)sender {
if ([sender.titleLabel.text isEqualToString:@"Start"]) {
NSLog(@"Start now");
if (timer) {
NSLog(@"Timer valid");
[timer fire];
} else {
NSLog(@"Timer is nil");
timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(tick) userInfo:nil repeats:YES];
[timer fire];
}
NSLog(@"bla");
[sender setTitle:@"Stop" forState:UIControlStateNormal];
} else {
[timer invalidate];
timer = nil;
NSLog(@"Stopped.");
NSLog(@"Timer isValid: %@", timer);
[sender setTitle:@"Start" forState:UIControlStateNormal];
}
}