За
init
метод NSDateFormatter
: «Доступен в iPhone OS 2.0 - iPhone OS 3.2» и, следовательно, не в 4.0. Конечно, это работает, но это кажется странным. Это ошибка или есть другой способ создать NSDateFormatter
?
За
init
метод NSDateFormatter
: «Доступен в iPhone OS 2.0 - iPhone OS 3.2» и, следовательно, не в 4.0. Конечно, это работает, но это кажется странным. Это ошибка или есть другой способ создать NSDateFormatter
?
Это устаревание - это просто очистка заголовков для NSDateFormatter. init уже объявлен в NSObject, от которого наследуется NSNumberFormatter. Повторное объявление не требуется, однако в реализации apple переопределит init, поскольку подкласс должен предоставлять реализации для инициализатора суперкласса по умолчанию.
Как falconcreek
сказал здесь, Apple просто очищает документы.
Это означает, что изначально - (id) init
был повторно объявлен в файле заголовка NSDateFormatter. В этом не было необходимости, и кто-то просто удалил это позже. Документация, вероятно, создается автоматически и не учитывается, поскольку устарел только повторное удаление.
Короче говоря, используйте init
как хотите с NSDateFormatter
!
Я бы доверял файлам заголовков, а не документации.
Например, Поведение форматирования и версии ОС, похоже, противоречит самому себе:
По умолчанию в 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:
на самом деле устаревший метод?
initWithDateFormat:allowNaturalLanguage:
на самом деле является устаревшим методом. Заголовочные файлы - это то, на что следует ссылаться в подобных обстоятельствах.
- person paulbailey; 15.12.2010
Это действительно странно. Может быть, +[NSDateFormatter new]
выполнит эту работу?
init
устарел, то +new
тоже, потому что +new
в любом случае не что иное, как +alloc/-init
(но хорошее предположение).
- person bbum; 14.12.2010
Я использую метод 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
.