2012-03-09 9 views
11

indexNumber.row è una data come 2012-03-09 23:00:00 +0000. Ho provato una manciata di modi diversi per ottenere la mia data in un NSDate, ma continuo a ricevere l'errore del titolo.conversione stringa in NSDate problema: [__NSDate Length] non riconosciuto selezionato

NSString *inputString = [self.measurements objectAtIndex:indexNumber.row]; 

// Convert string to date object 
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init]; 
[dateFormatter setDateFormat:@"yyyy-MM-dd"]; 
NSDate *date = [dateFormatter dateFromString:inputString ]; 
NSLog(@"date format is: %@", date); 

Tutte le idee perché ottengo il seguente errore:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSDate length]: unrecognized selector sent to instance 0x6ca0c60'

+0

Che errore ottieni, potresti essere un po 'più specifico? – Emil

risposta

28

Si ottiene questo errore, perché si sta passando un oggetto NSDate a dateFromString:.

Aggiungi un NSLog e vedrete che:

NSString *inputString = [self.measurements objectAtIndex:indexNumber.row]; 
if ([inputString isKindOfClass:[NSDate class]]) { 
    NSLog(@"inputString is of type NSDate"); 
} 

Inoltre, ecco come riprodurre l'errore:

NSString *inputString = [NSDate date]; 
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
NSDate *date = [dateFormatter dateFromString:inputString]; 

Ciò significa che la matrice self.measurements contiene NSDate oggetti e non NSString oggetti .


Quando si corregge il problema corrente, probabilmente ne incontrerai uno nuovo perché non utilizzi il formato di data corretto. Per analizzare stringhe di data di tipo: 2012-03-09 23:00:00 +0000 si consiglia di utilizzare il seguente formato di data:

[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss zz"]; 
+1

ho provato alcuni setDateformats diversi. Ottengo lo stesso errore con il formato precedente: "Terminazione dell'app a causa dell'eccezione non rilevata 'NSInvalidArgumentException', motivo: '- [__ NSDate length]: selettore non riconosciuto inviato all'istanza 0x6ca0c60'" – BamBamBeano

+0

aggiunto un NSLog dopo aver impostato la stringa e ottenere "data il formato è: 2012-03-09 09:36:53 +0000 " – BamBamBeano

+0

inchiodato. dopo aver eseguito il tuo if, era in effetti un NSDate e non era necessaria alcuna conversione. grazie sch. – BamBamBeano

0

O fare come sch suggerisce, o se non è necessario il tempo a tutti, si può semplicemente troncare la stringa feed per dataFormatter. Per esempio. in questo modo:

NSDate *date = [dateFormatter dateFromString:[inputString substringToIndex:9]]; 

Dove è un indice, fino al quale si vuole prendere un pezzo di corda.

+0

Questo non risolverà il suo problema. Se il problema era la formattazione della data, otterrebbe una data "nulla" e non l'errore che ha menzionato. – sch

+0

Se il problema è nella differenza tra il formato della data e il formato della stringa data, ** ** risolverà il problema. Se la stringa è * nil *, allora ovviamente non darà nulla, così come il tuo suggerimento. – makaron

Problemi correlati