2011-08-10 16 views
4

誰かがこれを助けることを願っています。 -timeIntervalSinceNowメソッドを使用しようとすると、不正なアクセスエラーが発生し続けます。私はNSDate *startDateと呼ばれるこのクラスの変数を持っていると私は-timeIntervalSinceNowのEXC_BAD_ACCESSエラー

startDate@property (nonatomic, retain) NSDate *startDate;が、ここでのコードで使用されている追加しました:プログラムは[startDate timeIntervalSinceNow]に到達すると、それが与える

startDate = [NSDate date]; 
    updateTimer = [NSTimer scheduledTimerWithTimeInterval:0.1 
                target:self 
               selector:@selector(updatePlaybackPosition:) 
               userInfo:nil 
                repeats:YES]; 
} 

}

- (void)updatePlaybackPosition:(NSTimer *)timer { 
    NSTimeInterval interval = [startDate timeIntervalSinceNow]; 

悪いアクセスエラー。私がこのトピックで読んだ他の投稿から、答えは通常、日付を保持することと関係があると思われます。だから、私は何が欠けているのか分からない。どんな助けでも大歓迎です!

答えて

0

[NSDate date]は、自動再生されたNSDateを返します。その値が返されたメソッドの外でその値を使用したい場合は、retain(そして完了したらrelease)にする必要があります。

+0

ありがとう、私はそれを[[NSDate date] retain]に変更し、最初の数回[startDate timeIntervalSinceNow]がタイマーで繰り返される間、プログラムに不正なアクセスエラーが発生するのを阻止しますが、ループはほとんどありません。また、それが返す時間間隔はnullです。それ以上の提案はありますか? – cms

5

NSDateは、タイマーが起動する前に自動的に解放されました。 updated:self.を使用して、インスタンス変数の代わりに宣言したプロパティを使用していることを確認してください。それはあなたのための保持を適切に処理します。

self.startDate = [NSDate date]; 

、その後

- (void)updatePlaybackPosition:(NSTimer *)timer { 
    NSTimeInterval interval = [self.startDate timeIntervalSinceNow]; 
+0

うーん..まだ更新メソッドで2番目のループで悪いアクセスを取得しています。 – cms

+0

私は投稿内であなたのプロパティ宣言を見逃しました。このプロパティにアクセスするのではなく、インスタンス変数です。私は私の答えを更新します。 – Joe

+0

ありがとうございます。私は変更を加えましたが、同じことをしました。一度更新タイマーをループしてから、その行にアクセスしてください。 – cms

1

私は実際には最終的に、これに対する答えを考え出しました。使用する方が良いと思われます。

-timeIntervalSinceDate:[NSDate date] 

-timeIntervalSinceNowではなく、使用してください。これは本質的に同じことをしますが、何らかの理由で-timeIntervalSinceNowが毎回悪いアクセスエラーを出しますが、上記の方法はうまくいきます。

関連する問題