秒単位の2つの日付の違い ios

ユーザーにコンテンツを表示するアプリがあります。私は、ユーザーが実際にそのコンテンツを何秒間閲覧したかを調べたいと思います。だから、私のヘッダーファイルで、I'veを宣言しました。

 NSDate *startTime;
 NSDate *endTime;

そして、viewWillAppearで

 startTime = [NSDate date];

次に、私のビューでWillDisappearが表示されます。

endTime = [NSDate date];
NSTimeInterval secs = [endTime timeIntervalSinceDate:startTime];
NSLog(@"Seconds --------> %f", secs);

しかし、アプリはクラッシュし、時々異なるエラーが発生します。あるときはメモリリーク、あるときはNSTimeIntervalの問題、そしてあるときは2回目にコンテンツに戻った後にクラッシュします。

これを修正するために何かアイデアはありますか?

ソリューション

と書くと、ARCを使用していないので

スタートタイム = [NSDateの日付];`と書くと

と書くと、 startTime を保持しないので、 -viewWillDisappear が呼び出される前に、 startTime は解放されます。試す

startTime = [[NSDateの日付]] retain];`.

また、ARCを使用することをお勧めします。メモリ管理に関するエラーは、ARCを使わない場合よりもずっと少なくなるはずです。

解説 (0)

開始日をretainしたプロパティを宣言する必要があります。時差を計算する前に、日付が解放されてしまいます。

そこで、次のように宣言します。

@property (nonatomic, retain) NSDate *startDate

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    [self setStartDate: [NSDate date]];
}

- (void)viewWillDisappear:(BOOL)animated
{
     [super viewWillDisappear:animated];
     NSLog(@"Seconds --------> %f",[[NSDate date] timeIntervalSinceDate: self.startDate]);
}

クリーンアップを忘れずに。

- (void)dealloc
{
    [self.startDate release];
    [super dealloc];
}
解説 (0)