Iphone 来自字符串崩溃设备的日期

Iphone 来自字符串崩溃设备的日期,iphone,nsdate,Iphone,Nsdate,我正在阅读RSS,其中有一个元素: 周四,2011年4月7日13:37:41+0000 我使用以下代码将收到的字符串转换为NSDate NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease]; [dateFormatter setDateFormat:@"E, d LLL yyyy HH:mm:ss Z"]; // Thu, 18 Jun 2010 04:48:09 -070

我正在阅读RSS,其中有一个元素:
周四,2011年4月7日13:37:41+0000
我使用以下代码将收到的字符串转换为NSDate

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

        [dateFormatter setDateFormat:@"E, d LLL yyyy HH:mm:ss Z"]; // Thu, 18 Jun 2010 04:48:09 -0700 


        NSDate *date = [dateFormatter dateFromString:[self.currentDate stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]]];        

        [item setObject:date forKey:@"date"]; 
代码在模拟器中运行良好,但在设备上崩溃。原因是NSDate对象保持为零,当我将其添加到字典时,它会使应用程序崩溃

我读了很多关于这个问题的书,但是没有一个解决方案对我有效。我的意思是他们中的很多人都这样做了,但是在模拟器中

感谢您的帮助, 卢卡

通过以下方法测试格式化程序的行为

[dateFormatter dateFromString:[NSDate date]]
如果不是格式化程序的格式,则意味着您的nsstring是罪魁祸首

你能记录下你要转换的字符串吗?可能是那个人的错

NSLog(@"string is: %@", self.currentDate);

检查两件事以消除模拟器和ios设备之间的差异

  • iOS设备区分大小写。所以你必须检查你的字符串是否有问题

  • 您的模拟器和iOS的区域设置可能不同。要防止这种情况,请定义日期格式化程序的正确区域设置

    NSLocale*usLocale=[[NSLocale alloc]initWithLocaleIdentifier:@“en_US”]

    [日期格式化程序setLocale:usLocale]


  • 可以将原始日期字符串打印到控制台,这样我们可以检查格式是否正确。之所以为nil,是因为日期格式化程序无法解析日期字符串。在将日期添加到数组之前,您应该检查它是否为零,以防万一。这是为日期格式化程序设置本地日期的问题。你能给我解释一下setLocale的功能吗?这是否迫使设备使用美国本地设置,而不是像我这样使用西班牙设置?另外,我是否可以预期其他设备会出现问题?谢谢。LsetLocale只是做本地化。日期格式化程序试图解析“Thu”而不是“Jue”,就像星期四设置语言环境en_US时一样。