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 nulJe 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 quedateFormatFromTemplate:
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 êtrenil
. Regarder plus de pile d'images et de voir si vous pouvez comprendre ce que peut envoyer lanil
date d'entrée. - À droite, le
dateFormatFromTemplate
est de retournil
. Qui, je le sais, savez-vous pourquoi ce serait le retournil
? 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 signifiedateFormatFromTemplate
est mal dans un certain sens. - Tout d'abord vous dire
formatString
estMMM dd, yyyy, HH:mm
, puis vous dites quedateFormatFromTemplate
, dont le résultat est défini commeformatString
, est de retournil
...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 dansMMM 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 formatHH: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'uneNSDate
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).
Vous devez vous connecter pour publier un commentaire.
L'erreur ne se produit pas dans le code que vous avez posté. Cela signifie quelque part que vous avez quelque chose qui est censé être une
NSDate
et c'est plutôtnil
.Que pour l'humour et le message d'erreur, je n'ai jamais vu ce message, mais +1 pour Apple. Certains ingénieur dans le Cacao de la division est aussi drôle que le bon vieux ingénieurs Apple a l'habitude d'avoir beaucoup de temps.
Vérifier le type de diagnostic d'Apple MPW compilateur C utilisé pour cracher http://www.netfunny.com/rhf/jokes/91q3/cerrors.html
[fmt setDateFormat:@"HH:mm dd MMM yyyy"];
il fonctionne très bien. Donc je suis en supposant quedateFormatFromTemplate:
est mal dans un certain sens.Merci beaucoup à nneonneo pour m'aider à comprendre cela.
Mon problème est que mon application a à travailler à l'étranger j'ai donc besoin d'dates pour afficher à l'égard de l'emplacement de l'utilisateur. J'ai pensé que je voudrais juste créer un
NSDateFormatter
pour les utilisateurs de paramètres régionaux puis la passer dans une chaîne de caractères date comme ceci:Cependant, le problème est que j'ai été localisation du format de la date avant je suis passé dans la chaîne de date. Dans mon cas,
NSDateFormatter
ressemblait à ça après la localisation.Qui je le format après la localisation pourrait regarder de nombreuses façons différentes après la localisation.
Donc le passage d'une chaîne avec un format de
HH:mm dd MMM yyyy
était à l'origine un retournil
.Qui est évident aujourd'hui -.-
Ainsi, au lieu de localisation lors de la création de la date, j'ai créer un les dates avec un format standard de
HH:mm dd MMM yyyy
. Ensuite, lors de l'affichage, j'ai formater leNSDate
pour les utilisateurs respectifs locale.