Метод инициализации NSDateFormatter устарел?

За

http://developer.apple.com/iphone/library/documentation/Cocoa/Reference/Foundation/Classes/NSDateFormatter_Class/Reference/Reference.html.

init метод NSDateFormatter: «Доступен в iPhone OS 2.0 - iPhone OS 3.2» и, следовательно, не в 4.0. Конечно, это работает, но это кажется странным. Это ошибка или есть другой способ создать NSDateFormatter?


person davetron5000    schedule 05.07.2010    source источник
comment
Где ты это читал?   -  person prgmast3r    schedule 14.12.2010
comment
Официальная документация: разработчик. apple.com/library/ios/#documentation/Cocoa/Reference/   -  person bontoJR    schedule 14.12.2010
comment
Я почти уверен, что setLocale и setTimeStyle - правильные способы сделать это, мне просто любопытно, как вы теперь должны получить экземпляр NSDateFormatter?   -  person fuzzygoat    schedule 14.12.2010
comment
+1, это весело. Интересно, о чем думает Apple? Я должен думать, что это какая-то ошибка. Надеюсь, кто-нибудь это поймет.   -  person Jonathan Sterling    schedule 14.12.2010


Ответы (7)


Это устаревание - это просто очистка заголовков для NSDateFormatter. init уже объявлен в NSObject, от которого наследуется NSNumberFormatter. Повторное объявление не требуется, однако в реализации apple переопределит init, поскольку подкласс должен предоставлять реализации для инициализатора суперкласса по умолчанию.

person falconcreek    schedule 05.07.2010
comment
Большое спасибо за это объяснение. ОЧЕНЬ вводит в заблуждение Apple. Его не следует отмечать как устаревшее. - person dmkash; 07.03.2011
comment
Однако по-прежнему полезно иметь документацию для метода инициализации для этого класса, чтобы описать, что делает реализация в этом классе. например инициализирует средство форматирования форматом по умолчанию и т. д. - person user102008; 26.04.2011

Как falconcreek сказал здесь, Apple просто очищает документы.

Это означает, что изначально - (id) init был повторно объявлен в файле заголовка NSDateFormatter. В этом не было необходимости, и кто-то просто удалил это позже. Документация, вероятно, создается автоматически и не учитывается, поскольку устарел только повторное удаление.

Короче говоря, используйте init как хотите с NSDateFormatter!

person gcamp    schedule 14.12.2010
comment
Я думаю, что эта документация вводит в заблуждение. Я использовал ссылку «нет бесполезно», чтобы отправить комментарий в Apple. - person JeremyP; 15.12.2010

Я бы доверял файлам заголовков, а не документации.

Например, Поведение форматирования и версии ОС, похоже, противоречит самому себе:

По умолчанию в Mac OS X v10.4 экземпляры NSDateFormatter ведут себя так же, как и в Mac OS X версий 10.0–10.3. В Mac OS X v10.5 и новее NSDateFormatter по умолчанию используется поведение 10.4+.

Если вы инициализируете средство форматирования с помощью initWithDateFormat:allowNaturalLanguage:, вы (из соображений обратной совместимости) создаете средство форматирования даты «старого стиля». Чтобы использовать новое поведение, вы инициализируете средство форматирования с помощью init. При необходимости вы можете установить поведение класса по умолчанию, используя setDefaultFormatterBehavior:), вы можете установить поведение для экземпляра, используя сообщение setFormatterBehavior: с аргументом NSDateFormatterBehavior10_4.

Похоже, что initWithDateFormat:allowNaturalLanguage: на самом деле устаревший метод?

person NSGod    schedule 14.12.2010
comment
Совершенно верно, кажется, что initWithDateFormat:allowNaturalLanguage: на самом деле является устаревшим методом. Заголовочные файлы - это то, на что следует ссылаться в подобных обстоятельствах. - person paulbailey; 15.12.2010

Это действительно странно. Может быть, +[NSDateFormatter new] выполнит эту работу?

person Stanislav Yaglo    schedule 14.12.2010
comment
Если init устарел, то +new тоже, потому что +new в любом случае не что иное, как +alloc/-init (но хорошее предположение). - person bbum; 14.12.2010

Я использую метод init в нескольких приложениях iOS4, и они одобрены и находятся в магазине. Я не могу придумать, как заставить его работать, так что это может показаться опечаткой в ​​документации.

person AtomRiot    schedule 05.07.2010

В примере кода в ссылке на класс по-прежнему используется метод init, поэтому я бы сказал, что его безопасно использовать в своем собственном коде.

person indragie    schedule 05.07.2010

Вы можете сами убедиться, что NSDateFormatter ведет себя по-разному в зависимости от выбранного вами инициализатора и SDK, с которым вы компилируете. Следующее протестировано с SDK 10.5 и 10.6.

NSDateFormatter* df = [[NSDateFormatter alloc] initWithDateFormat:@"yyyyMMdd" allowNaturalLanguage:NO];
if ([df formatterBehavior] == NSDateFormatterBehavior10_0)
    NSLog(@"NSDateFormatterBehavior10_0");
else if ([df formatterBehavior] == NSDateFormatterBehavior10_4)
    NSLog(@"NSDateFormatterBehavior10_4");

Это возвращает NSDateFormatterBehavior10_0.
Вместо этого, когда вы используете [[NSDateFormatter alloc] init];, поведение равно NSDateFormatterBehavior10_4.

person JJD    schedule 17.12.2010