Метод init NSDateFormatter устарел? - PullRequest
15 голосов
/ 06 июля 2010

За

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?

Ответы [ 7 ]

18 голосов
/ 06 июля 2010

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

6 голосов
/ 15 декабря 2010

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

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

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

2 голосов
/ 15 декабря 2010

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

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

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

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

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

1 голос
/ 14 декабря 2010

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

0 голосов
/ 17 декабря 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.

0 голосов
/ 06 июля 2010

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

0 голосов
/ 06 июля 2010

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

...