У мене є код, який я використовую для сортування календарних дат, який виглядає так:
#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] * - [__ NSCFC Календарні компоненти: fromDate:]: дата не може бути нульовою
Я маю на увазі насправді, що, на вашу думку, має означати операція з нульовою датою?
На даний момент виключення вдалося уникнути.
Кілька з цих помилок повідомлятимуться із цією скаргою, тоді подальші порушення просто мовчки робитимуть будь-які випадкові наслідки, що виникають з нуля. Ось зворотний шлях, де це сталося цього разу (деякі кадри можуть бути відсутніми через оптимізацію компілятора):
З цього треба посміятися, але я не впевнений, що не так з моїм dateFormatFromTemplate:
кодом. Будь-яка допомога буде вдячна.
Запуск Xcode V 4.5 до речі
ОНОВЛЕННЯ:
Зворотне відстеження:
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
роботу на міжнародному рівні.