Quel genre de sarcastique erreur est cet iOS?

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 le lance dans le simulateur, tout est ok. Si je l'exécute sur le périphérique, j'obtiens cette sarcastique message de débogage.

2012-09-19 22:40:13.972 APPNAME [4923:907] * -[__NSCFCalendar
composants:fromDate:]: la date ne peut pas être nul

Je veux dire, vraiment, que faites-vous
pense que l'opération est censée signifier avec un néant date?

Une exception a été évitée pour l'instant.

Quelques-unes de ces erreurs vont être
rapportés avec cette plainte, puis d'autres violations simplement
silencieusement faire tout aléatoire chose de résultats à partir du néant. Ici, c'est le
backtrace où cela s'est produit cette fois-ci (certaines images peuvent être manquants
grâce à des optimisations du compilateur):

Vous avez à rire d'elle, mais je ne suis pas sûr de ce qui est mal avec mon dateFormatFromTemplate: code. Toute aide serait appréciée.

L'exécution de Xcode 4.5 V btw


Mise à JOUR:

Backtrace:

0 CoreFoundation 0x39ff0e55 + 84

1
APPNAME 0x00040be1
-[MeetingsViewController dateAtBeginningOfDayForDate:] + 140

Donc je suppose que les choses vont mal dans ma 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 un NSDate à ses composants de base, afin que je puisse les trier plus efficacement. Cependant, mon application doit être international, qui est la raison derrière l'utilisation de NSLocale formate la date de sortie. À partir de ce qu'il semble, j'ai besoin de modifier mon dateAtBeginningOfDayForDate de travailler à l'échelle internationale.

  • OK, ce qui m'a fait rire. Quelqu'un de chez Apple a un cruel sens de l'humour...
  • Il dit qu'il y a une trace. Ce qui est dans la trace?
  • Il est à environ un mile de long, pas beaucoup de vraiment. Le truc, c'est que si j'exécute le code ci-dessus sur l'appareil avec seulement [fmt setDateFormat:@"HH:mm dd MMM yyyy"]; il fonctionne très bien. Donc je suis en supposant que dateFormatFromTemplate: est mal dans un certain sens.
  • Eh bien, j'étais curieux de savoir lequel de ces deux lignes s'est écrasé. Quelle est la valeur de formatString?
  • formatString = 'MMM jj aaaa HH:mm' Peut-être quelque chose à faire avec NSLocale des trucs? Je ne sais vraiment pas ce que je fais mal.
  • Est-il vraiment de crash lors de l'une de ces deux lignes? C'est là que le backtrace aiderait...
  • Je pense que c'est assez évident à partir du code que vous avez posté, et l'erreur que vous avez obtenu que inputDate doit être nil. Regarder plus de pile d'images et de voir si vous pouvez comprendre ce que peut envoyer la nil date d'entrée.
  • À droite, le dateFormatFromTemplate est de retour nil. Qui, je le sais, savez-vous pourquoi ce serait le retour nil? Dois-je avoir de l'installation de mal? Si j'ai mis le dateFormatter directement, il fonctionne très bien, donc je suis en supposant que signifie dateFormatFromTemplate est mal dans un certain sens.
  • Tout d'abord vous dire formatString est MMM dd, yyyy, HH:mm, puis vous dites que dateFormatFromTemplate, dont le résultat est défini comme formatString, est de retour nil...je suis un peu confus.
  • Je crois que le problème c'est que je passe dateFormatFromTemplate:@"HH:mm dd MMM yyyy" qui est ensuite traduit dans MMM dd, yyyy, HH:mm basé sur les paramètres régionaux de l'utilisateur. Alors, quand je vais passer dans une chaîne de caractères date au format HH:mm dd MMM yyyy il se casse. Donc, ce que je pense que je vais avoir à faire est de trier les dates avec l'aide d'une NSDate formaté pour les paramètres régionaux de l'utilisateur. Cependant, lorsque je vais à fait affichage les dates, je les mettre en forme pour l'affichage dans le local actuel. ouf.. Merci beaucoup pour votre aide!
  • Je viens de recevoir cette erreur! Super! Sympa aussi de voir un réel sens de l'humour, de prendre note de Microsoft. Puis à nouveau, peut-être que Microsoft pense que les écrans bleus sont drôles pour les développeurs
  • Je pense que ce message est soulevée précisément pour attirer votre attention. L'erreur se produit à l'intérieur des entrailles de l'iOS où une exception ne serait pas agréable et où les données de mauvaise qualité peut provoquer de mauvaises choses, de sorte que le code des faux les choses du mieux qu'elle peut. Mais elle souhaite attirer votre attention sur le problème.
  • Je préfère avoir l'exception de certains sarcastique commentaire est totalement inutile. Au moins sur une exception, je peux régler l'arrêt du débogueur et je peux voir où ça se passe, pour interroger les variables, etc. Je reçois cette occasion. La date vient directement à partir d'un enregistrement de base de données et la base de données montre que les dates de validité sont dans tous les enregistrements. Donc, il n'est pas facile de comprendre ce qui se passe. -1 pour Apple. (Maintenant, si ils ont eu la désagréable commentaire ET a jeté l'exception, tout serait bien).

InformationsquelleAutor random | 2012-09-20