我有一些代码,我使用看起来像这样的日历日期进行排序:
#if !(TARGET_IPHONE_SIMULATOR)
NSString *formatString = [NSDateFormatter dateFormatFromTemplate:@"HH:mm dd MMM yyyy" options:0
locale:[NSLocale currentLocale]];
[fmt setDateFormat:formatString];
#else
[fmt setDateFormat:@"HH:mm dd MMM yyyy"];
#endif
如果我在模拟器中运行一切正常。 如果我在设备上运行它,我得到这个讽刺调试消息。
2012-09-19 22:40:13.972 APPNAME [4923:907] * - [__ NSCFCalendar组件:FROM日期:]:日期不能是零
我是说真的,你觉得这是什么操作应该用零日期是什么意思?
异常被避免了现在。
一些这些错误会与此投诉报告,然后再违规将只是默默地尽一切从零随意的事情的结果。 这里是此本次发生的回溯(某些帧可能会丢失,由于编译器优化):
你必须笑对人生,但我不知道什么是错的我dateFormatFromTemplate:
代码。 任何帮助,将不胜感激。
运行Xcode的V 4.5 BTW
更新:
回溯:
0的CoreFoundation 0x39ff0e55 + 84
1个APPNAME 0x00040be1 - [MeetingsViewController dateAtBeginningOfDayForDate:] + 140
所以我想的东西在我越来越糟糕dateAtBeginningOfDayForDate
方法。 它看起来像这样:
/*
Break down a given NSDate to its bare components for sorting
*/
- (NSDate *)dateAtBeginningOfDayForDate:(NSDate *)inputDate
{
// Use the user's current calendar and time zone
NSCalendar *calendar = [NSCalendar currentCalendar];
NSTimeZone *timeZone = [NSTimeZone systemTimeZone];
[calendar setTimeZone:timeZone];
// Selectively convert the date components (year, month, day) of the input date
NSDateComponents *dateComps = [calendar components:NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit fromDate:inputDate];
// Set the time components manually
[dateComps setHour:0];
[dateComps setMinute:0];
[dateComps setSecond:0];
// Convert back
NSDate *beginningOfDay = [calendar dateFromComponents:dateComps];
return beginningOfDay;
}
我用这个方法给定的NSDate打破它的核心部件,这样我可以更有效地对它们进行排序的所有。 然而,我的应用程序必须是国际化是利用背后的原因NSLocale
成甲酸盐的日期输出。 从什么,似乎我需要改变我的dateAtBeginningOfDayForDate
工作国际为好。