0

来自 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 语言的新手。

谢谢,乔恩

4

1 回答 1

0

乔恩,问题是“当前” ivar 是自动释放的,所以下次运行循环旋转时,它就消失了(第一次工作导致你分配初始化它,它创建了一个保留计数为 1 的对象,而不是自动发布)。将 hitButton 中的行更改为此,你会很高兴:

last = [current retain];
于 2011-03-27T19:28:24.090 回答