У меня есть код, который я использую для сортировки дат календаря, которые выглядят так:
#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 компоненты: fromDate:]: дата не может быть nil
Я действительно имею в виду, что ты делаешь думаете, что операция должна означать с нулевой датой?
На данный момент исключение исключено.
Некоторые из этих ошибок будут сообщается с этой жалобой, то дальнейшие нарушения будут тихо делайте какую-либо случайную вещь из нуля. Здесь назад, где это произошло на этот раз (некоторые кадры могут отсутствовать из-за оптимизации компилятора):
Вы должны смеяться над этим, но я не уверен, что не так с моим кодом dateFormatFromTemplate:
. Любая помощь будет оценена по достоинству.
Запуск Xcode V 4.5 btw
UPDATE:
Backtrace:
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 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
для работы на международном уровне.