NSLocale в основном пустой - где атрибуты? - PullRequest
2 голосов
/ 19 сентября 2009

Я просто хочу узнать, установил ли пользователь iPhone в 12-часовой режим для отображения времени.

Класс NSLocale, казалось, описывал (в неопределенных неопределенных терминах без каких-либо примеров или явно полезных методов) то, что я преследовал.

Итак, я создал несколько NSLocale объектов примерно так:

NSLocale *systemLocaleApparently = [NSLocale systemLocale];
NSLocale *currentLocaleWithLotsOfGoodies = [NSLocale autoupdatingCurrentLocale];

Когда я проверяю эти объекты с помощью отладчика или NSLog(), лучшее, что я могу получить, это что-то вроде этого:

<CFLocale 0x1278e0 [0x382084f8]>{type = system, identifier = ''} 

В текущей локали есть строка идентификатора, но больше ничего.

Из документации я могу искать значения из локали, и одним из них является NSCalendar объект. Так что я получаю это назад и смотрю на это, и оно говорит мне, что это «григорианский».

Все это, по-видимому, полезно кому-то ... но что мне действительно нужно, так это хороший большой словарь атрибутов, показывающий все действительные системные свойства, главным образом, чтобы мой NSDateFormatters не взрывался при пользователь выбирает 12-часовой формат, даже если я заставил форматеры использовать en_US_POSIX языковой стандарт и фиксированный setDate формат.

(я уверен, NSCalendarDate никогда не имел таких проблем ...)

Надеюсь, я упускаю что-то вопиющее (и, вероятно, неловко) очевидное, но, возможно, кто-то вроде бы поделится этим со мной. Пожалуйста:)

1 Ответ

3 голосов
/ 19 сентября 2009

Вот один способ узнать, установил ли пользователь свой формат времени в 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;
...