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.