Я пытаюсь добавить в свое приложение функцию, позволяющую пользователю переключать текущую дату, отображаемую в американском формате (ММ / ДД / ГГГГ), в британский формат (ДД / ММ / ГГГГ) и обратно.
Я использую элемент управления сегментами для переключения моей UILabel (dateSlateLabel) между двумя отдельными таймерами (dateTimer_us & dateTimer_uk).
У меня все работает, но всякий раз, когда я переключаюсь на dateTimer_uk,dateTimer_us продолжает сопротивляться, как будто я не убил его.Когда я говорю «отбиваюсь», я имею в виду, что я вижу, что британский формат с американским форматом мигает взад и вперед, основываясь на timeInterval таймеров.Так как timeInterval моих таймеров равен 0,01, я вижу быстрое мигание формата США над форматом Великобритании.Мне ясно, что dateTimer_us не является недействительным или что-то еще запускает его резервное копирование.Когда я переключаюсь на dateTimer_us, все кажется нормальным, проблема заключается в другом (когда я переключаюсь на dateTimer_uk).Я понимаю, что что-то не так в моем коде / управлении памятью, но я не могу понять это.Я просмотрел сеть и потратил два дня на эту проблему.
Есть идеи?
Примечание. Я пытался использовать только один таймер и if else, который проверял состояние сегмента контроллера для управления форматом даты, но это не помогло.
Вот мой код:
//////////////////////////////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]];
}