Мы используем стандартное представление UIDatePicker, чтобы позволить пользователю установить продолжительность обратного отсчета с помощью средства выбора. Код выглядит следующим образом:
//in the header file
UIDatePicker *pickerView;
//in the implementation file, the error is thrown when this line executes
[self.pickerView setDatePickerMode:UIDatePickerModeCountDownTimer];
В большинстве случаев это работает нормально, однако у нас есть пользователь, у которого формат региона установлен на Тайвань, а календарь - на японский. Затем возникает следующее исключение:
2011-05-08 21: 38: 13.701
AppName [6418: 207] * Утверждение
ошибка в - [UIDatePickerView
_updateRowInColumn: toValue: withRepeatingAmount: элемент: анимированный:],
/SourceCache/UIKit_Sim/UIKit-1447.6.4/UIDatePicker.m:1499
2011-05-08 21: 38: 13.703
AppName [6418: 207] Завершение приложения
из-за неисследованного исключения
'NSInternalInconsistencyException',
причина: слишком много строк для
колонка: 1 '
** Стек вызовов при первом броске: (0 CoreFoundation
0x00fa3be9 __exceptionPreprocess + 185
1 libobjc.A.dylib
0x010f85c2 objc_exception_throw + 47
2 CoreFoundation
0x00f5c628 + [NSException
поднять: формат: аргументы:] + 136 3
Фонд
0x000d447b - [NSAssertionHandler
handleFailureInMethod: объект: файл LINENUMBER: Описание:]
+ 116 4 UIKit 0x004b1e4e - [UIDatePickerView
_updateRowInColumn: toValue: withRepeatingAmount: элемент: анимированные:]
+ 695 5 UIKit 0x004b5254 - [UIDatePickerView
_loadDateAnimated:] + 1012
У кого-нибудь есть опыт работы с вышеуказанной ошибкой или как обойти это? Кажется, что есть проблема с григорианской против не григорианской операцией этого компонента. Из того, что я понял, компонент берет настройки пользователя, если не задано значение по умолчанию:
Из UIDatePicker.h:
@property(nonatomic,retain) NSLocale *locale; // default is nil. use current locale or locale from calendar
@property(nonatomic,retain) NSTimeZone *timeZone; // default is nil. use current time zone or time zone from calendar
@property(nonatomic,copy) NSCalendar *calendar; // default is [NSCalendar currentCalendar]. setting nil returns to default