2009-02-20 5 views
1

У меня есть контроллер просмотра Я повторно использую для редактирования отдельных объектов (NSString, NSNumber, NSDate) в предыдущем ViewView контроллера ViewView. Я свободно основываю это на EditingViewController в примере проекта SQLiteBooks от Apple. datePicker создается в файле nib.Возможно «сбросить» выделенный месяц/день/год UIDatePicker?

Проблема здесь хорошо работает & dandy для первой даты, которую я установил с ним. НО, когда вызывается снова на 2-й день, он будет правильно отображать следующую дату, которую я редактирую в своих тумблерах (?), Когда она загружается, однако выделенный (синий) месяц, день & год - это те, с которых был выбран сборщик отображается перед первым редактированием. Как я могу установить эти выделенные значения на начальное значение второго объекта даты или сбросить весь экземпляр UIdatePicker.

2-й связанный вопрос (бонусные баллы ;-), поскольку я изо всех сил пытаюсь обернуть голову вокруг Cocoa: почему в примере SQLiteBooks нет операторов @property или @synthesize для datePicker, объявленных в EditingVewController.h? Или я упустил из виду очевидное? Благодаря!

Редактировать: После некоторых экспериментов с другими приложениями, использующими UIDatePickers, по какой-либо причине UIDatePicker, когда используется в режиме даты, выделит текущий месяц, день & год, даже если вы редактируете дату из 1776. КАК мы отключили это поведение?

ответ

1

Сохраните дату с первого выбора в, например. storedDate. Затем установите дату, которая будет отображаться в вашем UIDatePicker, используя свойство date. Предположу, ваш UIDatePicker называется сборщик, а затем

picker.date = storedDate; // picker's date is initialised to today's date/time 

Вы также можете использовать этот метод, если вы хотите, чтобы сборщик анимировать к вашей дате:

[picker setDate:storedDate animated:YES]; 

Что касается свойств, это не так, что они должны только для публичных данных. Свойства относятся к данным, доступ к которым осуществляется через методы, а не к непосредственному доступу через переменные экземпляра. Объявления свойств (в частности, @synthesize) говорят компилятору использовать эти объявления для автоматического создания методов доступа, необходимых для удовлетворения интерфейса вашего класса.

Точечный синтаксис в Objective-C переводится компилятором на вызов методов доступа. Так что ...

foo.bar = @"hello"; 

переводится компилятором в ...

[foo setBar:@"hello"]; 

setBar, также генерируется, будет делать все это должно в соответствии со своими декларациями @property. Поэтому, если он объявлен как сохраненный, он будет правильно сохранен в его сеттере, и вам не придется об этом беспокоиться.

Итак, в заключение, в то время как упомянутый вами код Apple может работать корректно (я не смотрел), было бы лучше защищать кодирование, чтобы использовать свойства.

+0

Как насчет сброса сборщика, который вы отформатировали с помощью только цифр в нем? как вы можете вернуться к нулю? – Jason

0

2-й родственный вопрос (бонусные очки ;-) как я изо всех сил, чтобы обернуть мою голову вокруг какао: почему в примере SQLiteBooks же нет @property или @synthesize заявления для Datepicker заявил в EditingVewController.h? Или я упустил из виду очевидное? Благодаря!

Вам нужно только объявить @property, если вы хотите, чтобы общественность была общедоступна. Для частных переменных экземпляра вы его не оставляете.

И @synthesize просто компилятор создает методы доступа для вашего @property, поэтому, если это не @property, вы не используете @synthesize (или @dynamic).

Смежные вопросы