NSNumber et format d'enregistrement dans un PList ?
Salut la compagnie,
Je rencontre un petit problème actuellement, j'enregistre un fichier de configuration au format PList pour un service d'OS X Server, dans cette config j'ai des booléens, naturellement représentés par une instance de NSNumber en mémoire.
Dans le fichier de configuration d'origine, ce sont des integer qui servent à coder le booléen. Lorsque mon logiciel réécrit la configuration, il remplace par des booléens. Fondamentalement ce n'est pas censé poser problème sauf que la même config décrite avec des integer marche alors qu'avec des bool ça ne marche pas.
Je pense donc qu'il y a un truc foireux dans l'interprétation des données côté service sauf que je ne peux rien y changer...
Je cherche donc un moyen d'imposer à un NSNumber de se considérer comme un integer et non un booléen lors d'un enregistrement...
Si quelqu'un a une idée...
Yoann
Je rencontre un petit problème actuellement, j'enregistre un fichier de configuration au format PList pour un service d'OS X Server, dans cette config j'ai des booléens, naturellement représentés par une instance de NSNumber en mémoire.
Dans le fichier de configuration d'origine, ce sont des integer qui servent à coder le booléen. Lorsque mon logiciel réécrit la configuration, il remplace par des booléens. Fondamentalement ce n'est pas censé poser problème sauf que la même config décrite avec des integer marche alors qu'avec des bool ça ne marche pas.
Je pense donc qu'il y a un truc foireux dans l'interprétation des données côté service sauf que je ne peux rien y changer...
Je cherche donc un moyen d'imposer à un NSNumber de se considérer comme un integer et non un booléen lors d'un enregistrement...
Si quelqu'un a une idée...
Yoann
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Si oui, tu as créé les nouveaux avec numberWithInt ou avec numberWithBool ?
Etrange comme problême
Tu peux regarder si ton NSNumber est du bon type, en regardant sa class
exemple:
ca t'affiche le type:
__NSCFNumber
__NSCFBoolean
Pas sur que cela t'aide.
Oui justement, il est modifié par un bindings sur une check box...
Si je pouvais trouver un truc pour éviter un [NSNumber numberWithInt:[property intValue]] ça m'arrangerait...
J'ai eu récemment le besoin de déterminer si un NSNumber était de type BOOL, pour une conversion en texte true, false.
Une recherche sur internet m'a permis de trouver que la méthode la plus fiable était celle-ci:
Le problème n'est pas tant de le déterminer que de l'imposer... Comment faire pour que le binding de la checkbox envoi un int et non un BOOL ?
C'est la salade interne aux bindings, qui finit toujours par poser des problèmes
A part utiliser un valueTransformer , je vois pas trop de solution. [grillé par Ceroce]
Les bindings n'y sont pour rien, c'est le code à qui est destiné le fichier de configuration (vpnd) qui est foireux. Je ne sais pas ce qu'ils ont branlé avec mais il ne sait pas interpréter un bool à la place d'un int...
Je vais regarder du coté des NSValueTransformer
Si on regarde la façon dont sont sauvegardés ces bools, celle-ci diffèrent selon la version de l'OS ou/et des applications.
Ainsi on peut trouver des entiers 0/1 ou des chaines Yes/No ou encore plus récemment <true> <false> (qui doit être une vraie valeur booléenne)
D'où selon les applications, des interprétations qui peuvent être différentes, surtout si celles-ci date un peu.
Effectivement, les bindings ne sont peut-être pas directement responsables, mais c'est toujours la galère quand le fonctionnement "standard" ne convient pas.
Merci pour vos recommandations !