Различное поведение между iOS 4.3 и 5.0 с выполнением кода UIDatePicker - PullRequest
3 голосов
/ 25 октября 2011

У меня непонятная проблема, когда я пытаюсь разобраться в различном поведении одного и того же кода на iPhone 4S под управлением iOS 5.0 и iPad под iOS 4.3.

Код контроллера представления связан с представлением со средством выбора даты для ввода даты рождения.С помощью Interface Builder средство выбора даты связано с полученным действием «Значение изменено», направленным на метод контроллера представления - (IBAction) birthDate: (id) отправитель:

-(IBAction)birthDate: (id)sender {

//Code here executed when date of birth entered. Should not be executed when view loads.


}

В приложении очень важно, чтобыэтот код НЕ будет выполняться при загрузке представления.С помощью вставки точки останова я продемонстрировал, что этот код не выполняется при загрузке представления с iOS 5.0, но выполняется при загрузке представления с iOS 4.3, что вызывает реальную проблему с программой (дата рождения по умолчанию становится интерпретированной как введенная дата рождения),Я был бы очень признателен за советы о том, как предотвратить выполнение кода IBAction в iOS 4.3, если пользователь не изменит дату рождения по умолчанию.Мне также очень любопытно, почему такая разница в поведении должна существовать.Заранее спасибо.

1 Ответ

3 голосов
/ 25 октября 2011

Это документированное изменение поведения UIPickerView в iOS 5.0 ( Замечания к выпуску ) Один из способов обойти это на iOS 4.3 - это иметь BOOL, для которого в начале loadView установлено значение YES, а в конце - NO.

Ваш метод изменения значения birthDate: может затем проверить, что это значение BOOL НЕТ перед обработкой изменения.

-(void)loadView
{
    isViewLoading = YES; // isViewLoading is a BOOL ivar
    // load view
}
-(void)viewDidLoad
{
    // what ever else
    isViewLoading = NO;
}
-(IBAction)birthDate:(id)sender
{
    if (isViewLoading) return;
    // handle change
}
...