Que tipo de erro sarcástico é esse iOS?
Eu tenho algum código que eu uso para classificar as datas do calendário que se parece com isso:
#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
Se eu correr no simulador, tudo está bem. Se eu executar no dispositivo, recebo esta mensagem de depuração sarcástica.
2012-09-19 22: 40: 13.972 APPNAME [4923: 907] * - [__ NSCFCalendar componentes: fromDate:]: data não pode ser nula
Quero dizer realmente, o que você acha que essa operação deve significar com uma data nula?
Uma exceção foi evitada por enquanto.
Alguns desses erros serão relatados com esta queixa, então novas violações simplesmente farão, silenciosamente, qualquer resultado aleatório do zero. Aqui está o backtrace em que isso ocorreu desta vez (alguns quadros podem estar ausentes devido a otimizações do compilador):
Você tem que rir disso, mas não tenho certeza do que está errado com o meudateFormatFromTemplate:
código. Qualquer ajuda seria apreciada.
Executando o Xcode V 4.5 btw
ATUALIZAR:
Backtrace:
0 CoreFoundation 0x39ff0e55 + 84
1 APPNAME 0x00040be1 - [MeetingsViewController dateAtBeginningOfDayForDate:] + 140
Então eu acho que as coisas estão indo mal na minhadateAtBeginningOfDayForDate
método. Que se parece com isso:
/*
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;
}
Eu uso esse método para dividir um determinado NSDate em seus componentes principais para que eu possa classificá-los de forma mais eficiente. No entanto, meu aplicativo tem que ser internacional, que é a razão por trás de usarNSLocale
para formatar a saída de data. Pelo que parece, vou precisar alterar meudateAtBeginningOfDayForDate
para trabalhar internacionalmente também.