2012-03-09 16 views
11

indexNumber.row, 2012-03-09 23:00:00 +0000 gibi bir tarih. Tarihimi bir NSDate içine almak için bir kaç farklı yöntem denedim, ancak başlık hatasını almaya devam ediyorum.dizgiyi NSDate sorununa dönüştürme: [__NSDate Length] tanınmayan seçili

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); 

aşağıdaki hatayı alıyorum neden herhangi bir fikir: Eğer dateFromString: bir NSDate nesne geçiyoruz çünkü

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

+0

Ne tür bir hata yaparsınız, biraz daha spesifik olabilir misiniz? – Emil

cevap

28

O hata alıyorum.

bir NSLog ekleyin ve göreceksiniz: Ayrıca

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

, burada hatayı yeniden nasıl olduğunu: dizi self.measurementsNSDate nesneler değil NSString nesneleri içeren anlamına gelir

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

.

Geçerli sorununuzu düzelttiğinizde, doğru tarih biçimini kullanmadığınız için muhtemelen yeni bir taneyle karşılaşacaksınız. Aşağıdaki tarih biçimini kullanmalısınız 2012-03-09 23:00:00 +0000: tip tarih dizeleri ayrıştırmak için sch anlaşılacağı gibi

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

Birkaç farklı setDateformats denedim. Yukarıdaki biçimi ile aynı hatayı alıyor: "nedeniyle yakalanmamış istisna 'NSInvalidArgumentException', akla uygulamayı Sonlandırma: '- [__ NSDate uzunluk]: tanınmayan seçici örneğine 0x6ca0c60 gönderilen'" – BamBamBeano

+0

dize ayarladıktan sonra NSLog eklendi ve olsun "tarihi Biçim: 2012-03-09 09:36:53 +0000 " – BamBamBeano

+0

bunu çivilenmiş. eğer çalıştırdıktan sonra, aslında bir NSDate idi ve hiçbir dönüşüm gerekli değildi. teşekkürler sch. – BamBamBeano

0

ikisi de böyle, ya da hiç bir zaman gerekmiyorsa, sadece dize sizi kesebilir dateFormatter için besleme. Örneğin. gibi pek: hangi dizesinin bir parça almak istiyorum kadar , bir endeksidir

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

.

+0

Bu onun problemini çözmeyecek. Sorun, tarih biçimlendirmesiyse, o bir "nil" tarihi alır ve bahsettiği hatayı değil. – sch

+0

Sorun, tarih biçimi ile verilen dizenin biçimi arasındaki farkta ise - bu ** sorunu çözecektir. Dize * nil * ise, elbette öneri yanı sıra hiçbir şey vermeyecektir. – makaron