2010-07-05 11 views
15

por¿El método init de NSDateFormatter está en desuso?

http://developer.apple.com/iphone/library/documentation/Cocoa/Reference/Foundation/Classes/NSDateFormatter_Class/Reference/Reference.html

El método de NSDateFormatterinit está "disponible en el iPhone OS 2.0 a través de iPhone OS 3.2", y por lo tanto no en 4.0. Ahora, ciertamente funciona, pero parece extraño. ¿Es esto un error o hay alguna otra forma de crear un NSDateFormatter?

+0

¿Dónde leíste esto? – prgmast3r

+0

Documentación oficial: http://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSDateFormatter_Class/DeprecationAppendix/AppendixADeprecatedAPI.html – bontoJR

+0

Estoy bastante seguro de que "setLocale" y "setTimeStyle" son los formas correctas de hacer esto, solo tengo curiosidad de cómo se supone que debes obtener la instancia NSDateFormatter ahora? – fuzzygoat

Respuesta

18

Esta desaprobación es solo una limpieza de los encabezados de NSDateFormatter. init ya está declarado en NSObject del que NSNumberFormatter hereda. Redeclar no es necesario, sin embargo, en la implementación apple anulará init ya que la subclase debería proporcionar implementaciones para el inicializador predeterminado de la superclase.

+0

Muchas gracias por esa explicación. MUY engañoso por parte de Apple. No debe marcarse como obsoleto. – dmkash

+0

Sin embargo, todavía es útil tener * documentación * para el método init para esta clase, para describir lo que hace la implementación en esta clase. p.ej. "inicializa el formateador con el formato predeterminado", etc. – user102008

0

Utilizo el método init en múltiples aplicaciones iOS4 y están aprobadas y en la tienda. No puedo pensar en ninguna forma de hacerlo funcionar, así que parece que es solo un error en los documentos.

0

El código de ejemplo en la referencia de clase todavía utiliza el método init, por lo que diría que es seguro usarlo en su propio código.

1

Eso es realmente extraño. Tal vez +[NSDateFormatter new] hará el trabajo?

+3

Si 'init' está en desuso, entonces' + new' también lo es, porque '+ new' no es más que' + alloc/-init' de todos modos (pero es una buena suposición). – bbum

2

Confío en los archivos de encabezado sobre la documentación.

Por ejemplo, Formatter Behaviors and OS Versions parece contradecirse:

Por defecto, en Mac OS X v10.4 casos de NSDateFormatter tiene el mismo comportamiento que lo hicieron en las versiones de Mac OS X 10.0 a 10.3. En Mac OS X v10.5 y posterior, NSDateFormatter adopta por defecto el comportamiento 10.4+.

Si inicializa un formateador usando initWithDateFormat:allowNaturalLanguage:, está (por razones de compatibilidad con versiones anteriores) creando un formateador de fecha "antiguo". Para usar el nuevo comportamiento, inicializa el formateador con init. Si es necesario, puede establecer el comportamiento de clase predeterminado usando setDefaultFormatterBehavior:), puede establecer el comportamiento para una instancia utilizando el mensaje setFormatterBehavior: con el argumento NSDateFormatterBehavior10_4.

Parece que initWithDateFormat:allowNaturalLanguage: es en realidad el método obsoleto?

+0

Exactamente, parece que 'initWithDateFormat: allowNaturalLanguage:' es en realidad el método en desuso. Los archivos de encabezado son a lo que se debe hacer referencia en circunstancias como esta. – paulbailey

6

Me gusta falconcreek dijo here, Apple está borrando los documentos.

Eso significa que originalmente, - (id) init ha sido redeclarado en el archivo de encabezado NSDateFormatter. Eso fue innecesario y alguien simplemente lo eliminó más tarde. La documentación probablemente se genera automáticamente y no se detectó que era solo la redeclaración que estaba en desuso.

En resumen, use init como desee con NSDateFormatter!

+1

Creo que el documwentation es muy engañoso. He utilizado el enlace "no no es útil" para enviar un comentario a Apple. – JeremyP

0

Puede probar usted mismo que NSDateFormatter tiene un comportamiento diferente según el inicializador que elija y el SDK con el que está compilando. Lo siguiente se prueba con SDK 10.5 y 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"); 

Esto devuelve NSDateFormatterBehavior10_0.
En cambio, cuando usa [[NSDateFormatter alloc] init];, el comportamiento es NSDateFormatterBehavior10_4.

Cuestiones relacionadas