J'ai un code que j'utilise pour trier les dates du calendrier qui ressemble à ceci :
#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 je l'exécute dans le simulateur, tout va bien. Si je l'exécute sur l'appareil, j'obtiens ce message de débogage sarcastique.
2012-09-19 22:40:13.972 APPNAME [4923:907] * -[__NSCFCalendar components:fromDate :]: la date ne peut pas être nulle
Je veux dire, vraiment, que pensez-vous cette opération est censée signifier avec une date nulle ?
Une exception a été évitée pour le moment.
Quelques-unes de ces erreurs vont être rapportées avec cette plainte, alors les autres violations feront simplement silencieusement faire n'importe quelle chose aléatoire résultant du zéro. Voici la backtrace où cela s'est produit cette fois-ci (certaines images peuvent être manquantes). à cause des optimisations du compilateur) :
Vous devez en rire, mais je ne suis pas sûr de ce qui ne va pas avec mon dateFormatFromTemplate:
code. Toute aide serait appréciée.
Exécution de Xcode V 4.5 en cours
UPDATE :
Backtrace :
0 CoreFoundation 0x39ff0e55 + 84
1 APPNAME 0x00040be1 -[MeetingsViewController dateAtBeginningOfDayForDate :] + 140
Donc je suppose que les choses vont mal dans mon dateAtBeginningOfDayForDate
méthode. Qui ressemble à ceci :
/*
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;
}
J'utilise cette méthode pour décomposer une NSDate donnée en ses principaux composants afin de pouvoir les trier plus efficacement. Cependant, mon application doit être internationale, ce qui explique l'utilisation de la méthode NSLocale
pour formater la sortie de la date. D'après ce que j'ai compris, je vais devoir modifier mon code d'accès. dateAtBeginningOfDayForDate
de travailler également à l'échelle internationale.