Tengo un código que uso para ordenar las fechas del calendario que se ve así:
#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
Si lo ejecuto en el simulador, todo está bien. Si lo ejecuto en el dispositivo, aparece este sarcástico mensaje de depuración.
2012-09-19 22: 40: 13.972 APPNAME [4923: 907] * - [__ NSCFCalendar components: fromDate:]: la fecha no puede ser nula
En realidad, ¿qué crees que significa esa operación con una fecha nula?
Se ha evitado una excepción por ahora.
Algunos de estos errores se informarán con esta queja, luego otras violaciones simplemente harán en silencio cualquier cosa aleatoria que resulte del nulo. Aquí está el rastreo donde esto ocurrió esta vez (algunos marcos pueden faltar debido a las optimizaciones del compilador):
Tienes que reírte de eso, pero no estoy seguro de qué está mal con mi dateFormatFromTemplate:
código. Cualquier ayuda sería apreciada.
Ejecutando Xcode V 4.5 por cierto
ACTUALIZAR:
Traza atrás:
0 CoreFoundation 0x39ff0e55 + 84
1 APPNAME 0x00040be1 - [MeetingsViewController dateAtBeginningOfDayForDate:] + 140
Así que supongo que las cosas van mal con mi dateAtBeginningOfDayForDate
método. Que se ve así:
/*
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;
}
Utilizo este método para dividir un NSDate dado en sus componentes principales para poder ordenarlos todos de manera más eficiente. Sin embargo, mi aplicación tiene que ser internacional, que es la razón por la que se usa NSLocale
para formatear la salida de fecha. Por lo que parece, tendré que modificar mi dateAtBeginningOfDayForDate
para trabajar también internacionalmente.