Метод даты UIDatePicker выбирает неправильную дату: iPhone Dev
Я получаю очень странное поведение на UIDatePicker. У меня есть представление с датчиком выбора, объявленным в файле.h как IBOutlet UIDatePicker *datePicker; с имуществом неатомным и сохранить. datePicker правильно связан в файле IB.
В коде я устанавливаю минимальную, максимальную, начальную дату и действие для вызова UICOntrolEventValueChanged, используя следующий код
If (!currentDate) {
initialDate = [NSDate date];
} else {
initialDate = currentdate;
}
[datePicker setMinimumDate:[NSDate date]];
[datePicker setMaximumDate:[[NSDate date] addTimeInterval:5 * 365.25 * 24 * 60 * 60]]; // to get upto 5 years
[datePicker setDate:initialDate animated:YES];
[datePicker addTarget:self action:@selector(getDatePickerValue:) forControlEvents:UIControlEventValueChanged];
В getDatePickerValue я получаю новую дату, используя datePicker.date.
Когда представление закрывается (с помощью кнопки "Готово"), я получаю текущее значение даты, используя datePicker.date.
Теперь, если представление вызывается без 'currentDate', сборщик возвращает 'сегодняшнюю дату'. Это то, что происходит при первом вызове моего pickerView. Каждый последующий вызов представления без "текущей даты" дает мне другую и более позднюю дату с сегодняшнего дня. Так,
впервые я получаю сегодняшнюю дату скажем 9 июня 2010
второй раз datePicker.date возвращается 10 июня 2010
в третий раз 11 июня 2010 года и так далее. Хотя это не всегда постепенно, но в основном это так.
Я поставил NSLogs и убедился, что начальная дата установлена правильно.
Проблема только на устройстве (на OS 3.0), проблема не повторяется на симуляторе.
Я не могу найти то, что я сделал неправильно. Я надеюсь, что кто-то еще сталкивался с подобной проблемой и может помочь мне решить эту проблему.
2 ответа
Вопрос окончательно решен. Список того, что решило проблему для меня, поэтому, если кто-то еще сталкивается с подобной проблемой, они могут попробовать эти шаги
Я сделал две вещи
1. установить локаль и календарь DatePicker -
NSLocale *locale = [NSLocale currentLocale];
[dateFormatter setLocale:locale];
self.datePicker.locale = locale;
self.datePicker.calendar = [locale objectForKey:NSLocaleCalendar];
Но одно это не решило проблему.
2. Я ставлю 'self' перед каждой ссылкой на datePicker, т.е. заменяю весь datePicker на self.datePicker. Это должно было заставить сеттеры компиляторов и геттеры вызываться.
Я не совсем понимаю, почему не использование "я" заставило его вести себя так странно. Но да, я буду более осторожен с использованием правильных сеттеров для моих переменных.
Спасибо, что нашли время, глядя на мою проблему.
IBOUTLET UIDatePicker *datePicker;
IBOUTLET UILabel *label;
}
-(void)click:(id)sender;
- (void)viewDidLoad {
[super viewDidLoad];
NSDate *dateFromPicker = [[NSDate alloc]init];
[date setDate:dat animated:YES];
}
-(void)click:(id)sender {
NSDate *selectDate = [datePicker date];
NSString *dateString = [NSString stringWithFormat:@"%@",selectDate];
[label setText:dateString];
}
это будет работать,