什么样的讽刺错误的是这个iOS的?(What kind of sarcastic error is

2019-07-31 17:24发布

我有一些代码,我使用看起来像这样的日历日期进行排序:

#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工作国际为好。

Answer 1:

错误并不在你发布的代码发生。 这意味着什么地方你有一些应该是一个NSDate ,而是它是nil

至于错误信息的幽默,我从来没有看到消息,但+1苹果。 在可可部门的一些工程师觉得好笑的好老工程师苹果曾经有过很多的时间前。

退房用于吐出一种诊断苹果的MPW C编译器的http://www.netfunny.com/rhf/jokes/91q3/cerrors.html



Answer 2:

许多感谢nneonneo帮助我弄清楚了这一点。

我的问题是,我的应用程序具有国际工作,所以我需要的日期相对于用户的位置来显示。 我以为我会只是创建一个NSDateFormatter到用户的语言环境,然后在字符串日期,像这样通过:

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

然而,问题是,我是本地化的日期格式之前,我在字符串日期已过。 在我的情况NSDateFormatter看上去像这样定位后。

MMM dd, yyyy, HH:mm

其中我国产化后的格式可以定位之后看许多不同的方式。

所以传递一个字符串的格式HH:mm dd MMM yyyy是导致它返回nil

现在很明显 -.-

因此,而不是当我创建日期本地化,我创建了一个具有标准格式的日期HH:mm dd MMM yyyy 。 然后显示的时候,我格式化NSDate给用户相应的语言环境。



文章来源: What kind of sarcastic error is this iOS?