什么样的讽刺错误是这个iOS?

我有一些代码我用来sorting日历date,看起来像这样:

#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 

如果我在模拟器中运行它一切正常。 如果我在设备上运行它,我会得到这个讽刺性的debugging信息。

2012-09-19 22:40:13.972 APPNAME [4923:907] * – [__ NSCFCalendar组件:fromDate:]:date不能为零

我的意思是,你认为这个操作应该是什么意思,没有date?

现在已经避免了一个例外。

这些错误中的一些将会与这个投诉一起被报告,然后进一步的违规将会简单地默默无闻地做任何无关的事情。 下面是这次发生的回溯(由于编译器优化,可能会丢失一些帧):

你必须笑,但我不知道我的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分解为其核心组件,以便我可以更有效地对它们进行sorting。 然而,我的应用程序必须是国际性的,这是使用NSLocale来合成date输出的原因。 从看起来我需要改变我的dateAtBeginningOfDayForDate在国际上也是如此。

该错误不会发生在您发布的代码中。 这意味着你有什么东西,应该是一个NSDate ,而不是nil

至于在错误信息中的幽默,我从来没有看到这个消息,但苹果+1。 cocoa部门的一位工程师跟苹果曾经在很久以前有过的优秀的老工程师一样有趣。

看看苹果公司的MPW C编译器用于吐出http://www.netfunny.com/rhf/jokes/91q3/cerrors.html

非常感谢nneonneo帮助我解决这个问题。

我的问题是,我的应用程序必须在国际上工作,所以我需要date显示相对于用户的位置。 我想我只是创build一个NSDateFormatter的用户区域设置,然后传递一个stringdate如下所示:

  NSString *formatString = [NSDateFormatter dateFormatFromTemplate:@"HH:mm dd MMM yyyy" options:0 locale:[NSLocale currentLocale]]; date = [fmt dateFromString:[NSString stringWithFormat:@"%@ %@", obj.meetingTime, obj.meetingDate]]; 

但是,问题是我在stringdate传递之前是date格式的本地化。 在本例中, NSDateFormatter在本地化后看起来像这样。

 MMM dd, yyyy, HH:mm 

我本地化后的格式可以看多种不同的方式。

所以传递一个格式为HH:mm dd MMM yyyy的string导致它返回nil

现在显而易见的是 –

因此,创builddate时不是本地化,而是使用标准格式HH:mm dd MMM yyyy创builddate。 然后在显示时,我将NSDate格式化为用户各自的语言环境。