У меня похожая проблема. Когда я в первый раз перешел с UIDatePickerModeDate на UIDatePickerModeTime, время было в порядке. Однако, когда я снова переключаюсь в режим ..Date, а затем снова в режим ..Time, время показывается как 00:00. После этого, независимо от количества смен режима, время всегда оставалось в 00:00. Я программно смоделировал свой UIDatePicker так же, как и UIDatePicker в приложении Apple UICatalog. Такое поведение не существует в их приложении.
Под вашим руководством я сохранил значение NSDate из средства выбора в сохраненном @property с намерением получить и сбросить средство выбора при уведомлении UIControl. Однако я не смог найти событие, которое сработало, когда средство выбора было переключено из режима даты в режим времени. Я даже попробовал что-то вроде:
[myDatePicker addTarget:self action:@selector(getDateTime:) forControlEvents:UIControlEventAllEvents];
Конечно, событие сработало, если я изменил дату (или время) сборщика, но, как я уже говорил, не при смене режима.
В итоге я использовал UISegmentedControl (такой же, как в приложении UICatalog), который нацелен на тот же метод события, что и выше, где я переключал режим. Однако, когда я перезагружал средство выбора на сохраненное значение NSDate, время оставалось в 00:00. Затем я использовал NSLog, чтобы проверить, что сохраненное значение было в порядке, и обнаружил, что его часть значения времени также изменилась на 00:00! Это было действительно странно, так как я не сохранил новое значение NSDate. Исходное сохраненное значение просто изменилось само по себе!
Я все еще изучаю проблему и очень близок к тому, чтобы называть это ошибкой, особенно когда программно добавлен UIDatePicker без поддержки NIB.
Обновление:
Мое окончательное решение было почти идентично вашему. По какой-то причине ошибка продолжалась, когда сохраненная дата сохранялась как значение NSDate. Сохранение его в виде строки NSStort и приведение типов в обоих направлениях сделали свое дело:
self.saveDate = (NSString*)self.myDatePicker.date;
...
[self.myDatePicker setDate:(NSDate*)self.saveDate animated:NO];
Кроме того, поскольку я получаю и сохраняю дату на внешнем устройстве через блок dispatch_async GCD, свойство self. нотация также была необходима (даже для main_que).
Окончательный вывод:
Теперь я убежден, что установка даты UIDatePicker при каждом обращении к средству выбора является необходимым требованием, а не ошибкой. Используя приложение Apple UICatalog, когда вы устанавливаете дату на сегодняшний день всего один раз, а затем переключаетесь между режимом «Дата и время», их приложение демонстрирует точно такое же поведение. Дата сохраняется, но время сбрасывается до 00:00. Если вы переключитесь в режим, отличный от даты или времени, и вернетесь назад, все режимы будут сброшены на свои минимальные значения.