NSLocale в основном пустой - где атрибуты?
-
22-07-2019 - |
Вопрос
Я действительно хочу знать, установил ли пользователь iPhone в 12-часовой режим для отображения времени.
Класс NSLocale
, казалось, описывал (в неопределенных неопределенных терминах без каких-либо примеров или явно полезных методов) то, что я преследовал.
Итак, я создал несколько объектов NSLocale
, например:
NSLocale *systemLocaleApparently = [NSLocale systemLocale];
NSLocale *currentLocaleWithLotsOfGoodies = [NSLocale autoupdatingCurrentLocale];
Когда я проверяю эти объекты с помощью отладчика или NSLog ()
, лучшее, что я могу получить, это что-то вроде этого:
<CFLocale 0x1278e0 [0x382084f8]>{type = system, identifier = ''}
В текущей локали есть строка идентификатора, но больше ничего.
Из документации я могу искать значения из локали, и одним из них является объект NSCalendar
. Поэтому я получаю это назад и смотрю на него, и оно говорит мне, что это «григорианский».
Все это, по-видимому, полезно кому-то ... но что мне действительно нужно, так это хороший большой словарь атрибутов, показывающий все действительные системные свойства, главным образом, чтобы мои NSDateFormatters
don ' Продолжать взрываться, когда пользователь выбирает 12-часовой формат, даже если я заставил форматировщики использовать локаль en_US_POSIX
и фиксированный формат setDate
.
(я уверен, что NSCalendarDate
никогда не имел таких проблем ...)
Надеюсь, я упускаю что-то вопиющее (и, вероятно, неловко) очевидное, но, возможно, кто-то добрый поделится этим со мной. Пожалуйста:)
Решение
Вот один из способов узнать, установил ли пользователь свой формат времени на 12- или 24-часовой формат:
NSDateFormatter* formatter = [[[NSDateFormatter alloc] init] autorelease];
[formatter setTimeStyle:NSDateFormatterMediumStyle];
// Look for H (24-hour format) vs. h (12-hour format) in the date format.
NSString* dateFormat = [formatter dateFormat];
BOOL using24HourClock = [dateFormat rangeOfString:@"h"].location == NSNotFound;