Per
Метод init
NSDateFormatter
- "Доступен в iPhone OS 2.0 через iPhone OS 3.2" и, следовательно, не в 4.0. Теперь это работает, но это кажется странным. Это ошибка или есть какой-то другой способ создать NSDateFormatter
?
Per
Метод init
NSDateFormatter
- "Доступен в iPhone OS 2.0 через iPhone OS 3.2" и, следовательно, не в 4.0. Теперь это работает, но это кажется странным. Это ошибка или есть какой-то другой способ создать NSDateFormatter
?
Это устаревание - это просто очистка Apple заголовками для NSDateFormatter. init уже объявлен в NSObject, из которого NSNumberFormatter наследуется. Redeclaring не требуется, однако в реализации apple переопределит init, поскольку подклассы должны обеспечивать реализации инициализатора по умолчанию суперкласса.
Как falconcreek
сказал здесь, Apple просто очищает документы.
Это означает, что изначально - (id) init
был обновлен в файле заголовка NSDateFormatter. Это было необязательно, и кто-то просто удалил его позже. Документация, вероятно, сгенерирована автоматически и не подбирала, что это была только переоценка, которая устарела.
Короче говоря, используйте init
, как хотите, с помощью NSDateFormatter
!
Я бы доверял файлам заголовков над документацией.
Например, 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:
- это действительно устаревший метод?
Это действительно странно. Может быть, +[NSDateFormatter new]
выполнит эту работу?
Я использую метод init в нескольких приложениях iOS4, и они одобрены и хранятся в магазине. Я не могу придумать, как заставить его работать, так что это похоже на опечатку на документах.
Пример кода в ссылке класса по-прежнему использует метод init
, поэтому я бы сказал, что он безопасен для использования в вашем собственном коде.
Вы можете убедиться, что 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
.