2010-07-09 10 views
8

Sto usando seguente codice & suo lavoro perfettamente bene in iPhone OS 3,2per iPhone OS 4.0 metodo "dateFromString" di NSDateFormatter restituisce 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; 
} 

Ma quando ho provato ad utilizzare lo stesso codice che iPhone OS 4.0 il dateObj era nulla.

Il motivo è:

metodo

- (id)init per NSDateFormatter è disponibile solo in iPhone OS 2.0 con iPhone OS 3.2. È deprecato in iPhone OS 4.0.

Ora qual è la soluzione? Come inizializzare NSDateFormater? Qual è l'alternativa?

+0

Possiamo convertire NSString in NSDate utilizzando NSDateComponents come: NSDateComponents * comps = [[NSDateComponents alloc] init]; [comps setDay: 6]; [comps setMonth: 5]; [comps setYear: 2004]; NSCalendar * gregorian = [[NSCalendar alloc] initWithCalendarIdentifier: NSGregorianCalendar]; NSData * date = [gregorian dateFromComponents: comps]; [versione comps]; – Rambo

+3

Ma, ora cosa fare con NSDateFormatter? Non possiamo usarlo con IPhone OS 4.0? se sì allora come? – Rambo

+1

solo perché è deprecato non significa che non funzionerà - potrebbe non funzionare in futuro. Se tu __NSLog (@ "% @", dateFormatter); __ dopo che hai chiamato init cosa ottieni? Se non si ottiene nulla, questo avviso non ha nulla a che fare con il tuo problema. – deanWombourne

risposta

2

- (id)init non è deprecato per NSDateFormatter in iOS4. Questo è un errore nella documentazione.

+0

Stavo pensando che questo deve essere il caso - questo è documentato ovunque sui forum degli sviluppatori Apple ecc.? –

2

[NSDateFormatter dateFormatFromTemplate: opzioni: locale:] potrebbe funzionare meglio

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

// "M/dh: mm un" formato // inglese degli Stati Uniti è tornato per la locale US

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

In iOS2.xe 3.x la funzione NSDate description/datefromstring restituisce: 2010-09-24 17:30:00 - 0700

in iOS 4.1 restituisce questo: 2010- 09-25 00:30:00 GMT

È possibile inviare un bug a Apple. Non segue nemmeno la specifica che afferma che dovrebbe restituire 0000 per l'offset. Quindi non solo non restituisce la data locale, ma usa anche GMT anziché un offset. Sembra che questo nuovo formato non sia compatibile con i metodi NSDateFormatter.

Inoltre, non penso che sia un errore nella documentazione. Nel documento Diff API, elenca che init viene rimosso per NSDateFormatter.

+0

Ancora più sconcertante, i risultati variano se si modifica la configurazione del dispositivo da un orologio a 24 ore a un orologio a 12 ore: S –

Problemi correlati