Подтвердить что ты не робот

Метод NSDateFormatter init устарел?

Per

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?

4b9b3361

Ответ 1

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

Ответ 2

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

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

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

Ответ 3

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

Например, Formatter Behaviors и Версии ОС, кажется, противоречит самому себе:

По умолчанию в 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: - это действительно устаревший метод?

Ответ 4

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

Ответ 5

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

Ответ 6

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

Ответ 7

Вы можете убедиться, что 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.