来自viewcontroller.m文件
-(void) hitButton
{
current = [NSDate date];
interval = [current timeIntervalSinceDate:last];
rate = 60 / (double)interval;
last = current;
NSString *output = [NSString stringWithFormat:@"%d bpm",rate];
[btnout setTitle:output forState:UIControlStateNormal];
}
- (void)viewDidLoad {
last = [[NSDate alloc] init];
current = [[NSDate alloc] init];
[super viewDidLoad];
}
来自Viewcontroller头文件
@interface RateAnalyserViewController : UIViewController {
double interval;
int rate;
NSDate *current;
NSDate *last;
IBOutlet UIButton *btnhit;
IBOutlet UIButton *btnout;
}
@property (nonatomic, retain) UIButton *btnhit;
@property (nonatomic, retain) UIButton *btnout;
-(IBAction) hitButton;
@end
您好, 我正在尝试创建一个简单的应用程序,在BPM中显示某个人按下按钮的速率。
出于某种原因,该应用程序在第一次按下时工作正常但第二次崩溃。没有例外或任何关于原因的信息。我已经使用NSLogs来验证第二次调用hitButton方法并确定程序崩溃@ current = [NSDate date]。
任何帮助将不胜感激。对不起,如果我错过了什么。是OO语言的新手。
谢谢,乔恩
答案 0 :(得分:0)
我想通了..好吧,我发现其他人已经得到了答案!我需要'保留'我当前的约会对象。像这样......
current = [[NSDate date] retain];
从这个帖子得到答案..
答案 1 :(得分:0)
Jon,问题是“当前”ivar是自动释放的,所以下次运行循环旋转时,它就消失了(第一次工作会导致你对它进行alloc-init',这会创建一个保留计数为1的对象不是自动释放的)。将hitButton中的行更改为此,您将很高兴:
last = [current retain];