2011-04-07 31 views
0

我正在读RSS,并从那里的元素: <pubDate>星期四,2011年4月7日13时37分41秒+0000 </pubDate> 我用下面的代码把接收到的字符串转换成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对象保持零,当我将它添加到字典时,它崩溃了应用程序。

我读了很多关于这个问题,但没有解决方案为我工作。我的意思是很多人都试了,但在模拟器......

任何帮助表示赞赏, 卢卡 ...

+0

可以将原始日期字符串打印到控制台,这样我们可以检查格式是否正确。之所以为零,是因为日期格式化程序无法解析日期字符串。以防万一,在将数据添加到数组之前,应该检查日期是否为零。 – rckoenes 2011-04-07 11:47:20

回答

1

检查两件事情,以消除模拟器和iOS设备之间的差异。

  1. iOS设备区分大小写。所以你必须检查你的字符串是否有错误。

  2. 语言环境设置可能与您的模拟器和iOS不同。以防止这样定义日期格式化程序的正确区域。

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

    [dateFormatter setLocale:usLocale];

+0

这是为日期格式化程序设置本地的问题。你能给我解释一下setLocale的作用吗?它是否强迫设备使用美国本地设置而不是西班牙设置?另外,我可以预期其他设备出现问题吗?非常感谢。 L – luigi7up 2011-04-07 12:15:22

+0

setLocale只是做本地化。日期格式化程序尝试在周四设置区域en_US时解析“Thu”而不是“Jue”。 – Alkimake 2011-04-07 13:38:55

0

测试通过

[dateFormatter dateFromString:[NSDate date]] 

格式化程序的行为,如果不是格式化的格式化意味着你的nsstring是一个怪。

您可以记录您尝试转换的字符串吗?这可能是有过错的人

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