Bonjour,
CoreData fonctionne très bien avec les String mais dès que je veux manipuler des nombres, c’est l’impasse pour mon champs longueur:
Dans la vue du formulaire cela semble marcher mais c’est peut être un peu fragile:
@State private var modele = ""
@State private var longueur = Double(0.00)
let types = ["Voilier", "Moteur"]
var body: some View {
NavigationView {
Form {
Section {
TextField("Longueur", value: $longueur, formatter: NumberFormatter())
}
Mais dans la vue ou j’affiche le détail de l’enregistrement, j’ai toujours une erreur de compilation:
Je ne comprends pas bien quel est le modèle, il faudrait voir le fichier .xcdatamodeld avec ton entité et ses attributs et quels sont-ils : entité bateau, attribut type (String) et longueur (Double) par exemple ? Tu as choisi la génération automatique d’une classe à partir de l’entité ? Et alors, c’est modele ou bateau ? Parce que je ne suis pas sûr que ce soit un problème de syntaxe des Double, elle a l’air correcte.
Merci de me répondre
le modele est classique et l’enregistrement dans Coredata fonctionne parfaitement tant qu’il n’y a pas de champs double. J’ai pu saisir et afficher sans problème bles champs texte: Nom, type, marque…
Merci ristretto,
c’est mieux avec
Text("(bateau.longueur ?? 0.00)")
Je n’ai plus d’erreur de compilation.
Mais du coup cela me retourne : 0.000000
Ce qui veut dire que la saisie dans le formulaire:
n’est pas correcte ou en tout cas ne fonctionne pas…
Je m’en doutais un peu mais n’ai rien trouvé sue le sujet : saisie d’un double dans un formulaire!
Cordialement
Holliver
NumberFormatter est très puissant; pour limiter à deux les chiffres après la virgule, il faut le spécifier à NumberFormatter. Exemple :
var numberFormatter = NumberFormatter()
numberFormatter.minimumFractionDigits = 2
numberFormatter.string(from: longueur) = 0.00 // si longueur est égale à 0.000000
L’exemple est tiré de la doc officielle d’Apple, car je ne suis guère doctus sine libro, comme on dit en presque latin.