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で表示するシンプルなアプリを作ろうとしています。

何らかの理由で、アプリは最初のプレスでは正常に動作しますが、2回目にはクラッシュします。理由については、例外や情報は提供されていません。NSLogsを使用して、hitButtonメソッドが2回呼び出されることを確認し、プログラムが@ current =[NSDatedate]でクラッシュすることを確認しました。

どんな助けでもいただければ幸いです。私が何かを逃した場合は申し訳ありません。オブジェクト指向言語は初めてです。

ありがとう、ジョン

4

1 に答える 1

0

ジョン、問題は「現在の」ivarが自動解放されるため、次に実行ループがスピンするときに、それがなくなっていることです(最初に割り当て初期化されたときに機能し、保持カウントが1ではないオブジェクトが作成されます自動解放されます)。hitButton の行を次のように変更すると、準備完了です。

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