Jaki sarkastyczny błąd to ten iOS?

Mam kod, którego używam do sortowania dat kalendarza, który wygląda tak:

#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

Jeśli uruchomię go w symulatorze, wszystko jest w porządku. Jeśli uruchomię go na urządzeniu, otrzymam tę sarkastyczną wiadomość debugującą.

2012-09-19 22: 40: 13.972 APPNAME [4923: 907] * - [__ Składniki NSCFCalendar: fromDate:]: data nie może być zerowa

Mam na myśli naprawdę, jak myślisz, co ta operacja ma oznaczać z zerową datą?

Na razie uniknięto wyjątku.

Kilka z tych błędów zostanie zgłoszonych w związku z tą skargą, a kolejne naruszenia po prostu cicho zrobią coś losowego z zerowego. Oto ślad wsteczny, w którym wystąpił tym razem (niektóre ramki mogą nie być dostępne z powodu optymalizacji kompilatora):

Musisz się z tego śmiać, ale nie jestem pewien, co jest nie tak z moimdateFormatFromTemplate: kod. Każda pomoc byłaby doceniana.

Uruchamianie Xcode V 4.5 btw

AKTUALIZACJA:

Śledzenie:

0 CoreFoundation 0x39ff0e55 + 84
1 APPNAME 0x00040be1 - [MeetingsViewController dateAtBeginningOfDayForDate:] + 140

Więc sądzę, że w moim przypadku wszystko idzie źledateAtBeginningOfDayForDate metoda. Który wygląda tak:

/*
 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;
}

Korzystam z tej metody, aby podzielić dany NSDate na jego podstawowe komponenty, dzięki czemu mogę je sortować bardziej efektywnie. Jednak moja aplikacja musi być międzynarodowa, co jest powodem używaniaNSLocale formować dane wyjściowe daty. Z tego, co wydaje się, będę musiał zmienić mojedateAtBeginningOfDayForDate pracować również na arenie międzynarodowej.

questionAnswers(2)

yourAnswerToTheQuestion