2010-07-09 15 views
8

estoy usando siguiente código & su trabajo perfectamente bien en el iPhone OS 3,2para el iPhone OS 4.0 método "dateFromString" de NSDateFormatter devuelve nil

+(NSDate *)NSDateFromString:(NSString *)dateString 
{ 

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 

    [dateFormatter setDateStyle:NSDateFormatterShortStyle]; 
    [dateFormatter setTimeStyle:NSDateFormatterShortStyle]; 
    [dateFormatter setDateFormat:@"yyyy-MM-dd"]; 
    NSDate *dateObj=[dateFormatter dateFromString:dateString]; 
    [dateFormatter release], dateFormatter=nil; 
    return dateObj; 
} 

Pero cuando traté de utilizar el mismo código que el iPhone OS 4.0 del dateObj era nulo.

La razón es:

método

- (id)init para NSDateFormatter sólo está disponible en el iPhone OS 2.0 a través de iPhone OS 3.2. Está en desuso en iPhone OS 4.0.

¿Cuál es la solución para eso? ¿Cómo iniciar NSDateFormater? ¿Cuál es la alternativa?

+0

Podemos convertir el NSString a NSDate usando NSDateComponents como: NSDateComponents * comps = [[NSDateComponents alloc] init]; [comps setDay: 6]; [comps setMonth: 5]; [comps setYear: 2004]; NSCalendar * gregorian = [[NSCalendar alloc] initWithCalendarIdentifier: NSGregorianCalendar]; NSDate * date = [fecha gregorFromComponents: comps]; [liberación de comps]; – Rambo

+3

Pero, ¿ahora qué hacer con NSDateFormatter? ¿No podemos usarlo con IPhone OS 4.0? Si es así, entonces cómo ? – Rambo

+1

solo porque está obsoleto no significa que no funcione; es posible que no funcione en el futuro. Si __NSLog (@ "% @", dateFormatter); __ después de llamar a init, ¿qué obtiene? Si no obtienes nada, esta advertencia no tiene nada que ver con tu problema. – deanWombourne

Respuesta

2

- (id)init no está en desuso para NSDateFormatter en iOS4. Eso es un error en la documentación.

+0

Estaba pensando que este debería ser el caso. ¿Está esto documentado en cualquier lugar de los foros de desarrolladores de Apple, etc.? –

2

[NSDateFormatter dateFormatFromTemplate: Opciones: locale:] podría funcionar mejor

NSString *format = [NSDateFormatter 
        dateFormatFromTemplate:@"Mdjm" 
            options:0 
            locale:[NSLocale currentLocale]]; 

// "M/dh: mm a" formato // estadounidense Inglés regresó para la configuración regional de EE.UU.

[dateFormatter setDateFormat:format]; 
NSDate *date = [dateFormatter dateFromString:dateString]; 
2

En iOS2.x 3.x los NSDate Descripción/datefromstring función devuelve: 2010-09-24 17:30:00 - 0700

en iOS 4.1 que devuelve este : 2010- 09-25 00:30:00 GMT

Puede enviar un error a Apple. Ni siquiera sigue la especificación que establece que debería devolver 0000 para el desplazamiento. Por lo tanto, no solo no devuelve la fecha local, también utiliza GMT en lugar de un desplazamiento. Parece que este nuevo formato no es compatible con los métodos NSDateFormatter.

Además, no creo que sea un error en la documentación. En el documento API Diff, enumera que init se eliminó para NSDateFormatter.

+0

Aún más desconcertante, los resultados varían si cambia la configuración de su dispositivo de un reloj de 24 horas a un reloj de 12 horas: S –

Cuestiones relacionadas