ユーザーが米国形式(MM / DD / YYYY)で表示されている現在の日付を英国形式(DD / MM / YYYY)に切り替えたり、元に戻したりできる機能をアプリに追加しようとしています。
セグメントコントロールを使用して、UILabel(dateSlateLabel)を2つの別々のタイマー(dateTimer_usとdateTimer_uk)の間で切り替えています。
私はすべてが機能していますが、dateTimer_ukに切り替えると、dateTimer_usは、それを殺していないかのように反撃し続けます。私が反撃すると言うとき、私はタイマーのtimeIntervalに基づいてUSフォーマットが前後に点滅しているUKフォーマットを見ていることを意味します。タイマーのtimeIntervalが.01であるため、英国の形式よりも米国の形式がすばやく点滅します。dateTimer_usが無効にされていないか、他の何かがそれをバックアップし始めていることは私には明らかです。dateTimer_usに切り替えると、すべて問題ないように見えますが、その逆が問題です(dateTimer_ukに切り替えると)。コード/メモリ管理に問題があると思いますが、理解できません。私はウェブを精査し、この問題に2日間費やしました。
何か案は?
注:1つのタイマーとif elseを使用して、segmentControlステータスをチェックして日付形式を駆動しようとしましたが、機能しなかったようです。
これが私のコードです:
//////////////////////////////THIS CONTROLS THE DATE TIMER//////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////
- (IBAction)toggleDateFormat {
if(dateFormatSegmentControl.selectedSegmentIndex == 0) {
[dateTimer_uk invalidate];
[dateTimer_uk release];
dateTimer_uk = nil;
[self dateTimer_us];
}
else if (dateFormatSegmentControl.selectedSegmentIndex == 1) {
[dateTimer_us invalidate];
[dateTimer_us release];
dateTimer_us = nil;
[self dateTimer_uk];
}
}
-(void)dateTimer_us {
dateTimer_us = [[NSTimer scheduledTimerWithTimeInterval: .01
target: self
selector: @selector(displayDate_us)
userInfo: nil
repeats: YES] retain];
}
-(void)displayDate_us; {
NSDateFormatter *formatter =
[[[NSDateFormatter alloc] init] autorelease];
NSDate *date = [NSDate date];
[formatter setDateFormat:@"MM/dd/yyyy"];
[dateSlateLabel setText:[formatter stringFromDate:date]];
}
-(void)dateTimer_uk {
dateTimer_uk = [[NSTimer scheduledTimerWithTimeInterval: .01
target: self
selector: @selector(displayDate_uk)
userInfo: nil
repeats: YES] retain];
}
-(void)displayDate_uk; {
NSDateFormatter *formatter =
[[[NSDateFormatter alloc] init] autorelease];
NSDate *date = [NSDate date];
[formatter setDateFormat:@"dd/MM/yyyy"];
[dateSlateLabel setText:[formatter stringFromDate:date]];
}