Aller au contenu


Photo

[macOS][TUTORIEL]Introduction à CoreData

CoreData tutoriel

  • Please log in to reply
24 réponses à ce sujet

#1 Draken

Draken

    Mouleur de chocolats

  • Artisan chocolatier
  • PipPipPipPipPipPipPipPip
  • 8 800 messages
  • LocationParis

Posté 18 juin 2017 - 16:59

Un tuto pour macOS, j'en ai presque honte .. Je l'ai rédigé à la demande de Patyom qui a quelques difficultés pour démarrer avec CoreData sous macOS

 

http://forum.cocoaca...lview/?p=147678

 

De toute manière, c'est exactement la même chose sous iOS. Et cela m'a permis de comprendre quelques trucs que je n'avais pas saisi initialement.

 

------

Le but de cet exercice est de créer une mini-base de données pour archiver des bulletins de note scolaire. Chaque fiche contient :

- le nom d'un élève

- son âge

- sa moyenne

 

L'application permet de créer des fiches, de les afficher et de les détruire. La génération d'une nouvelle fiche se fait de manière aléatoire pour éviter un code de saisie trop compliqué.

 

Première étape : création d'une Cocoa Application pour macOS

 

 

 

Fichier(s) joint(s)

  • Fichier joint  etape1.png   117,37 Ko   0 téléchargement(s)

Garçon, servez-moi un Covfefe avec du lait de soja, sans OGM ..

Et faites régler la climatisation, il fait bien chaud, ici !

 

 

Éternel Novice !  :baby:

Tueur de poneys !  :(

 

Faire simple .. c'est compliqué !

Faire compliqué .. c'est simple !

 

Un MOOC (cours en ligne - dont je ne suis pas l'auteur) gratuit sur la programmation en Obj-C et en Swift 3, démarrant le 14 Mars 2017 :

https://www.edx.org/...onnex-progios1x

 

Des dizaines d'heures de tutoriels vidéo en français (je ne suis pas l'auteur) pour apprendre à développer en Obj-C et Swift : http://pagesperso-sy...don/5I452-2014/

 

 


#2 Draken

Draken

    Mouleur de chocolats

  • Artisan chocolatier
  • PipPipPipPipPipPipPipPip
  • 8 800 messages
  • LocationParis

Posté 18 juin 2017 - 17:07

Seconde étape, on indique à Xcode qu'il s'agit d'une application utilisant CoreData, en cochant l'option Use Core Data.

 

 

 

 

Fichier(s) joint(s)

  • Fichier joint  etape.png   576,49 Ko   0 téléchargement(s)

Garçon, servez-moi un Covfefe avec du lait de soja, sans OGM ..

Et faites régler la climatisation, il fait bien chaud, ici !

 

 

Éternel Novice !  :baby:

Tueur de poneys !  :(

 

Faire simple .. c'est compliqué !

Faire compliqué .. c'est simple !

 

Un MOOC (cours en ligne - dont je ne suis pas l'auteur) gratuit sur la programmation en Obj-C et en Swift 3, démarrant le 14 Mars 2017 :

https://www.edx.org/...onnex-progios1x

 

Des dizaines d'heures de tutoriels vidéo en français (je ne suis pas l'auteur) pour apprendre à développer en Obj-C et Swift : http://pagesperso-sy...don/5I452-2014/

 

 


#3 Draken

Draken

    Mouleur de chocolats

  • Artisan chocolatier
  • PipPipPipPipPipPipPipPip
  • 8 800 messages
  • LocationParis

Posté 18 juin 2017 - 17:27

Le projet généré par Xcode contient un fichier avec l'extension xcdatamodeld. C'est là que les objets CoreData sont définis.  Dans le techno jargon cupertinien, ce sont des Entités (Entity).

 

Pour créer une Entity, il faut :

 

1) sélectionner le fichier .xcdatamodeld

2) cliquer sur le bouton (+) Add Entity en bas de l'écran

3) sélectionner la nouvelle Entity

4) modifier son nom avec l'inspecteur de propriétés

 

 

Fichier(s) joint(s)

  • Fichier joint  etape3.jpg   80,54 Ko   0 téléchargement(s)

Garçon, servez-moi un Covfefe avec du lait de soja, sans OGM ..

Et faites régler la climatisation, il fait bien chaud, ici !

 

 

Éternel Novice !  :baby:

Tueur de poneys !  :(

 

Faire simple .. c'est compliqué !

Faire compliqué .. c'est simple !

 

Un MOOC (cours en ligne - dont je ne suis pas l'auteur) gratuit sur la programmation en Obj-C et en Swift 3, démarrant le 14 Mars 2017 :

https://www.edx.org/...onnex-progios1x

 

Des dizaines d'heures de tutoriels vidéo en français (je ne suis pas l'auteur) pour apprendre à développer en Obj-C et Swift : http://pagesperso-sy...don/5I452-2014/

 

 


#4 Draken

Draken

    Mouleur de chocolats

  • Artisan chocolatier
  • PipPipPipPipPipPipPipPip
  • 8 800 messages
  • LocationParis

Posté 18 juin 2017 - 17:30

Sans grande originalité, j'ai appelé mon Entity Fiche.

Fichier(s) joint(s)

  • Fichier joint  etape4.png   53,72 Ko   0 téléchargement(s)

Garçon, servez-moi un Covfefe avec du lait de soja, sans OGM ..

Et faites régler la climatisation, il fait bien chaud, ici !

 

 

Éternel Novice !  :baby:

Tueur de poneys !  :(

 

Faire simple .. c'est compliqué !

Faire compliqué .. c'est simple !

 

Un MOOC (cours en ligne - dont je ne suis pas l'auteur) gratuit sur la programmation en Obj-C et en Swift 3, démarrant le 14 Mars 2017 :

https://www.edx.org/...onnex-progios1x

 

Des dizaines d'heures de tutoriels vidéo en français (je ne suis pas l'auteur) pour apprendre à développer en Obj-C et Swift : http://pagesperso-sy...don/5I452-2014/

 

 


#5 Draken

Draken

    Mouleur de chocolats

  • Artisan chocolatier
  • PipPipPipPipPipPipPipPip
  • 8 800 messages
  • LocationParis

Posté 18 juin 2017 - 17:38

Une Entity CoreData peut avoir des attributs (nom, âge et moyenne pour mes fiches).

Pour définir un attribut, il faut sélectionner l'Entité, puis :

 

1) cliquer sur le bouton (+) Add Attribute en bas de la fenêtre

2) Définir le nom et le type de l'attribut

 

 

 

 

Fichier(s) joint(s)

  • Fichier joint  etape5.jpg   53,01 Ko   0 téléchargement(s)

Garçon, servez-moi un Covfefe avec du lait de soja, sans OGM ..

Et faites régler la climatisation, il fait bien chaud, ici !

 

 

Éternel Novice !  :baby:

Tueur de poneys !  :(

 

Faire simple .. c'est compliqué !

Faire compliqué .. c'est simple !

 

Un MOOC (cours en ligne - dont je ne suis pas l'auteur) gratuit sur la programmation en Obj-C et en Swift 3, démarrant le 14 Mars 2017 :

https://www.edx.org/...onnex-progios1x

 

Des dizaines d'heures de tutoriels vidéo en français (je ne suis pas l'auteur) pour apprendre à développer en Obj-C et Swift : http://pagesperso-sy...don/5I452-2014/

 

 


#6 Draken

Draken

    Mouleur de chocolats

  • Artisan chocolatier
  • PipPipPipPipPipPipPipPip
  • 8 800 messages
  • LocationParis

Posté 18 juin 2017 - 17:42

On ne peut pas mettre n'importe quoi dans une Entity. On ne peut utiliser que les types existants.

 

Mon premier attribut est un nom de type String.

 

 

Fichier(s) joint(s)

  • Fichier joint  etape6.png   67,4 Ko   0 téléchargement(s)

Garçon, servez-moi un Covfefe avec du lait de soja, sans OGM ..

Et faites régler la climatisation, il fait bien chaud, ici !

 

 

Éternel Novice !  :baby:

Tueur de poneys !  :(

 

Faire simple .. c'est compliqué !

Faire compliqué .. c'est simple !

 

Un MOOC (cours en ligne - dont je ne suis pas l'auteur) gratuit sur la programmation en Obj-C et en Swift 3, démarrant le 14 Mars 2017 :

https://www.edx.org/...onnex-progios1x

 

Des dizaines d'heures de tutoriels vidéo en français (je ne suis pas l'auteur) pour apprendre à développer en Obj-C et Swift : http://pagesperso-sy...don/5I452-2014/

 

 


#7 Draken

Draken

    Mouleur de chocolats

  • Artisan chocolatier
  • PipPipPipPipPipPipPipPip
  • 8 800 messages
  • LocationParis

Posté 18 juin 2017 - 17:47

Au final, j'ai défini 3 attributs pour mon objet (Entity) Fiche :

 

- un nom de type String

- un age de type Int32

- une moyenne de type Float

 

 

 

 

Fichier(s) joint(s)

  • Fichier joint  etape7.png   50,23 Ko   0 téléchargement(s)

Garçon, servez-moi un Covfefe avec du lait de soja, sans OGM ..

Et faites régler la climatisation, il fait bien chaud, ici !

 

 

Éternel Novice !  :baby:

Tueur de poneys !  :(

 

Faire simple .. c'est compliqué !

Faire compliqué .. c'est simple !

 

Un MOOC (cours en ligne - dont je ne suis pas l'auteur) gratuit sur la programmation en Obj-C et en Swift 3, démarrant le 14 Mars 2017 :

https://www.edx.org/...onnex-progios1x

 

Des dizaines d'heures de tutoriels vidéo en français (je ne suis pas l'auteur) pour apprendre à développer en Obj-C et Swift : http://pagesperso-sy...don/5I452-2014/

 

 


#8 Draken

Draken

    Mouleur de chocolats

  • Artisan chocolatier
  • PipPipPipPipPipPipPipPip
  • 8 800 messages
  • LocationParis

Posté 18 juin 2017 - 18:26

La gestion de CoreData s'effectue par le biais d'un objet appelé PersistentContainer, généré automatiquement par Xcode si l'option Use Core Data est coché à la création de l'application. Il est associé au délégué de l'Application. Il faut récupérer sa valeur à chaque accès à CoreData ou la stocker dans une variable.

 

Moi j'ai préféré lire sa valeur avec une petite routine, défini dans le viewController.

// Lecture du context CoreData
    func recuperationContextCoreData() -> NSManagedObjectContext? {
        return (NSApplication.shared().delegate as? AppDelegate)?.persistentContainer.viewContext
    }

Il est de type NSManagedObjectContext?. Les NSManagedObject sont la clé pour utiliser CoreData sans (trop) de prise de tête. L'Entity Fiche que j'ai défini avec l'éditeur graphique de CoreData est traité automatiquement comme une classe de type NSManagedObject.

 

Pour créer un objet de type Fiche, il faut l'initialiser avec le context CoreData :

let fiche = Fiche(context: context)

Et remplir les attribut avec les bonnes propriétés :

fiche.nom     = nomAleatoire
fiche.age     = ageAleatoire
fiche.moyenne = moyenneAleatoire

Attention, le contexte ne sauve pas automatiquement les données dans CoreData. Il faut lui demander de le faire.

        // Sauvegarde des modifications dans le persistentContainer
        do {
            try context.save()
        } catch {
            print("ERREUR écriture CoreData")
        }

Ce code sauve dans le fichier CoreData (le persistentContainer) toutes les modifications des objets liées au contexte depuis la dernière sauvegarde.

 

Voici tous les morceaux de code réunis dans une fonction :

func creerNouvelleFiche() {
        
        guard let context = recuperationContextCoreData()
        else { return }
        
        // Création données aléatoires
        let posAleatoire = arc4random_uniform(UInt32(listeNoms.count))
        let nomAleatoire = listeNoms[Int(posAleatoire)]
        let ageAleatoire = Int32(10 + arc4random_uniform(4))
        let moyenneAleatoire:Float = 7 + Float(arc4random_uniform(8))/2.0
        
        // Création fiche
        let fiche     = Fiche(context: context)
        fiche.nom     = nomAleatoire
        fiche.age     = ageAleatoire
        fiche.moyenne = moyenneAleatoire
        
        // Sauvegarde des modifications dans le persistentContainer
        do {
            try context.save()
        } catch {
            print("ERREUR écriture CoreData")
        }
        
        print ("********")
        print ("Création nouvelle fiche")
    }

Le template d'application Apple défini le contexte comme étant de type NSManagedObject?. Cela veut dire que (parfois, éventuellement, peut-être) il peut se produire un problème avec le persistentContainer (impossibilité de le créer par manque de mémoire disque, par exemple). Dans ce cas, il sera de valeur nil.

 

La plupart des tutos sur CoreData lise la valeur du contexte en le forçant avec l'opérateur "!". C'est MAL ! Et plantogéne. Bon d'accord, il est peu probable que le context soit nil, mais cela peut arriver sur un ordinateur/device n'ayant plus de mémoire disque. Et là, paf .. le plantage ! Et un mauvais commentaire sur le Store : "L'application iTruc plante sans cesse. c'est une honte de vendre une horreur pareille. BOUH !".

 

C'est pourquoi je récupère la valeur du contexte CoreData avec un guard, au début de la fonction.

 

guard let context = recuperationContextCoreData()
else { return }

Si le context est nil, la fonction ne s'exécute pas et ne PLANTE PAS !

 

Pour une application commerciale, j'aurais ajouté l'affichage d'un message à l'utilisateur. Quelque chose comme : "L'application ne parvient pas à écrire des données sur le disque. Il est possible que votre disque soit complètement remplis".

 

Un message d'alerte vaut toujours mille fois mieux qu'un PLANTAGE SEC !

 

EDIT : Le nom des élèves est généré aléatoirement à partir d'un tableau de String :

let listeNoms = [
    "Jacques",
    "Pierre",
    "Robert",
    "Eric",
    "Pépin",
    "Anne",
    "Sophie",
    "Yuri",
    "Aruma",
    "Zork",
    "Laurent",
    "Marie"
]


Garçon, servez-moi un Covfefe avec du lait de soja, sans OGM ..

Et faites régler la climatisation, il fait bien chaud, ici !

 

 

Éternel Novice !  :baby:

Tueur de poneys !  :(

 

Faire simple .. c'est compliqué !

Faire compliqué .. c'est simple !

 

Un MOOC (cours en ligne - dont je ne suis pas l'auteur) gratuit sur la programmation en Obj-C et en Swift 3, démarrant le 14 Mars 2017 :

https://www.edx.org/...onnex-progios1x

 

Des dizaines d'heures de tutoriels vidéo en français (je ne suis pas l'auteur) pour apprendre à développer en Obj-C et Swift : http://pagesperso-sy...don/5I452-2014/

 

 


#9 Draken

Draken

    Mouleur de chocolats

  • Artisan chocolatier
  • PipPipPipPipPipPipPipPip
  • 8 800 messages
  • LocationParis

Posté 18 juin 2017 - 18:36

Etape suivante, comme lire le contenu des fiches ?

 

Nous avons déjà parlé de la manière de lire des données CoreData dans ce topic :

 

http://forum.cocoaca...redata-swift-3/

 

Je me contente juste de donner le code nécessaire au chargement des Fiches :

func chargementFiches() -> [Fiche]? {
        
        guard let context = recuperationContextCoreData()
        else { return nil }

        let requete = Fiche.fetchRequest() as NSFetchRequest<Fiche>
        var liste:[Fiche]?
        
        do {
            liste = try context.fetch(requete)
        } catch {
            print ("ERREUR requete CoreData")
        }
        
        // Si l'instruction fetch(requete) ne trouve rien
        // elle retourne un tableau [Fiche]? de taille nulle
        // Je trouve que renvoyer un tableau optionnel avec un contenu vide
        // n'est pas vraiment dans l'esprit Swift.
        // J'ai donc ajouté un test pour retourner nil
        // dans ce cas.
        if let liste = liste {
            if liste.count == 0 {
                return nil
            }
        }
        
        return liste
    }

La méthode chargementFiches() scanne le fichier CoreData, pour retourner un tableau contenant tous les objets de type Fiche.

 

Il suffit ensuite de parcourir le tableau pour consulter le contenu des fiches :

func affichageFiches() {
        
        print ("************")
        print ("AFFICHAGE DES FICHES")

        // Chargement à partir de CoreData
        if let listeFiches = chargementFiches() {
            // Affichage des fiches
            for fiche in listeFiches {
                print ("------")
                // Les chaînes CoreData sont des String?
                // il faut les convertir pour l'affichage
                if let nom = fiche.nom {
                    print ("Nom : ", nom)
                }
                print ("Age : ",     fiche.age)
                print ("Moyenne : ", fiche.moyenne)
            }
            
        } else {
            print ("Aucune fiche enregistrée !")
        }
    }


Garçon, servez-moi un Covfefe avec du lait de soja, sans OGM ..

Et faites régler la climatisation, il fait bien chaud, ici !

 

 

Éternel Novice !  :baby:

Tueur de poneys !  :(

 

Faire simple .. c'est compliqué !

Faire compliqué .. c'est simple !

 

Un MOOC (cours en ligne - dont je ne suis pas l'auteur) gratuit sur la programmation en Obj-C et en Swift 3, démarrant le 14 Mars 2017 :

https://www.edx.org/...onnex-progios1x

 

Des dizaines d'heures de tutoriels vidéo en français (je ne suis pas l'auteur) pour apprendre à développer en Obj-C et Swift : http://pagesperso-sy...don/5I452-2014/

 

 


#10 Draken

Draken

    Mouleur de chocolats

  • Artisan chocolatier
  • PipPipPipPipPipPipPipPip
  • 8 800 messages
  • LocationParis

Posté 18 juin 2017 - 18:44

Pour détruire un objet CoreData, il suffit de le demander au context.

context.delete(fiche)

Mais attention, la destruction n'est pas immédiate. Et ne sera effective qu'après la prochaine mise à jour du contexte.

// mise à jour du contexte
do {
      try context.save()
   } catch { 
      print("ERREUR écriture CoreData")
   }

Voici une routine détruisant TOUS les objets de type Fiche contenus dans CoreData :

func destructionFiches() {
        guard let context = recuperationContextCoreData()
            else { return }
        
        print ("*******************")
        print ("DESTRUCTION DES FICHES")

        // Chargement des fiches
        if let listeFiches = chargementFiches() {
            for fiche in listeFiches {
                context.delete(fiche)
            }
            // mise à jour du contexte
            do {
                try context.save()
            } catch {
                print("ERREUR écriture CoreData")
            }
            
            print ("Destruction terminée..")
            
        } else {
            print ("Aucune fiche. Destruction impossible")
        }
        
    }

Elle commence par charger les Fiches, puis fait un test pour vérifier qu'il en existe au moins une. Un message d'erreur est affiché si aucune fiche n'existe.


Garçon, servez-moi un Covfefe avec du lait de soja, sans OGM ..

Et faites régler la climatisation, il fait bien chaud, ici !

 

 

Éternel Novice !  :baby:

Tueur de poneys !  :(

 

Faire simple .. c'est compliqué !

Faire compliqué .. c'est simple !

 

Un MOOC (cours en ligne - dont je ne suis pas l'auteur) gratuit sur la programmation en Obj-C et en Swift 3, démarrant le 14 Mars 2017 :

https://www.edx.org/...onnex-progios1x

 

Des dizaines d'heures de tutoriels vidéo en français (je ne suis pas l'auteur) pour apprendre à développer en Obj-C et Swift : http://pagesperso-sy...don/5I452-2014/

 

 


#11 Draken

Draken

    Mouleur de chocolats

  • Artisan chocolatier
  • PipPipPipPipPipPipPipPip
  • 8 800 messages
  • LocationParis

Posté 18 juin 2017 - 18:49

J'ai écrit une petite application pour tester tout ça, mélangeant interface macOS et affichage console.

A la première utilisation, elle affiche qu'il n'y a aucune fiche.

 

 

Aucune fiche au démarrage

 

 

 

 

Fichier(s) joint(s)

  • Fichier joint  etape8.png   81,58 Ko   1 téléchargement(s)

Garçon, servez-moi un Covfefe avec du lait de soja, sans OGM ..

Et faites régler la climatisation, il fait bien chaud, ici !

 

 

Éternel Novice !  :baby:

Tueur de poneys !  :(

 

Faire simple .. c'est compliqué !

Faire compliqué .. c'est simple !

 

Un MOOC (cours en ligne - dont je ne suis pas l'auteur) gratuit sur la programmation en Obj-C et en Swift 3, démarrant le 14 Mars 2017 :

https://www.edx.org/...onnex-progios1x

 

Des dizaines d'heures de tutoriels vidéo en français (je ne suis pas l'auteur) pour apprendre à développer en Obj-C et Swift : http://pagesperso-sy...don/5I452-2014/

 

 


#12 Draken

Draken

    Mouleur de chocolats

  • Artisan chocolatier
  • PipPipPipPipPipPipPipPip
  • 8 800 messages
  • LocationParis

Posté 18 juin 2017 - 18:54

Je presse sur le bouton "Affichage des fiches". Elle me répond que :

 

 

************

AFFICHAGE DES FICHES

Aucune fiche enregistrée !

 

 

Puis, sur le bouton "Détruire toutes les fiches" :

 

 

*******************

DESTRUCTION DES FICHES

Aucune fiche. Destruction impossible

 

 

Et pourquoi pas "créer nouvelle fiche aléatoire" ?. Il s'affiche alors :

 

 

********

Création nouvelle fiche

 

 

Nouveau clic sur le bouton "Affichage des fiches" :

 

 

************

AFFICHAGE DES FICHES

------

Nom :  Yuri

Age :  12

Moyenne :  10.5

Il y a bien un élève (aléatoire), avec une moyenne de 10,5
 
Je presse deux fois de plus sur le bouton de création, et j'affiche la nouvelle liste :
 

 

************

AFFICHAGE DES FICHES

------

Nom :  Yuri

Age :  12

Moyenne :  10.5

------

Nom :  Aruma

Age :  11

Moyenne :  10.5

------

Nom :  Jacques

Age :  11

Moyenne :  7.5

 

 

J'ai bien 3 élèves, dont le dernier est un cancre !

Garçon, servez-moi un Covfefe avec du lait de soja, sans OGM ..

Et faites régler la climatisation, il fait bien chaud, ici !

 

 

Éternel Novice !  :baby:

Tueur de poneys !  :(

 

Faire simple .. c'est compliqué !

Faire compliqué .. c'est simple !

 

Un MOOC (cours en ligne - dont je ne suis pas l'auteur) gratuit sur la programmation en Obj-C et en Swift 3, démarrant le 14 Mars 2017 :

https://www.edx.org/...onnex-progios1x

 

Des dizaines d'heures de tutoriels vidéo en français (je ne suis pas l'auteur) pour apprendre à développer en Obj-C et Swift : http://pagesperso-sy...don/5I452-2014/

 

 


#13 Draken

Draken

    Mouleur de chocolats

  • Artisan chocolatier
  • PipPipPipPipPipPipPipPip
  • 8 800 messages
  • LocationParis

Posté 18 juin 2017 - 19:05

Je quitte l'application avant de la relancer. Il s'affiche :

 

 

Nombre fiches au démarrage :  3

 

Il y a bien eu pertinence des données, malgré l'arrêt du programme.

 

Pour en être certain, je clique sur le bouton "Affichage des Fiches".

 

 

************

AFFICHAGE DES FICHES

------

Nom :  Yuri

Age :  12

Moyenne :  10.5

------

Nom :  Aruma

Age :  11

Moyenne :  10.5

------

Nom :  Jacques

Age :  11

Moyenne :  7.5

 

 

Pas de doute, Jacques est vraiment un cancre !


Garçon, servez-moi un Covfefe avec du lait de soja, sans OGM ..

Et faites régler la climatisation, il fait bien chaud, ici !

 

 

Éternel Novice !  :baby:

Tueur de poneys !  :(

 

Faire simple .. c'est compliqué !

Faire compliqué .. c'est simple !

 

Un MOOC (cours en ligne - dont je ne suis pas l'auteur) gratuit sur la programmation en Obj-C et en Swift 3, démarrant le 14 Mars 2017 :

https://www.edx.org/...onnex-progios1x

 

Des dizaines d'heures de tutoriels vidéo en français (je ne suis pas l'auteur) pour apprendre à développer en Obj-C et Swift : http://pagesperso-sy...don/5I452-2014/

 

 


#14 Draken

Draken

    Mouleur de chocolats

  • Artisan chocolatier
  • PipPipPipPipPipPipPipPip
  • 8 800 messages
  • LocationParis

Posté 18 juin 2017 - 19:27

Petit arrêt pour cause de résultats électorales. 

 

Je détruit les fiches avec le bouton "Détruire toutes les fiches" 

 

 

*******************

DESTRUCTION DES FICHES

Destruction terminée..

 

 

Nouvelle pression sur "Afficher les fiches" :

 

 

************

AFFICHAGE DES FICHES

Aucune fiche enregistrée !

 

 

Je quitte l'application et je relance :

 

 

Aucune fiche au démarrage

 

 

Persistence .. ok !

 

C'est a peu prés tout ce que je sais faire avec CoreData, du moins pour le moment.

 

 

Le code source peut être téléchargé ici  : Fichier joint  FichesCoreData.zip   40,07 Ko   5 téléchargement(s)


Garçon, servez-moi un Covfefe avec du lait de soja, sans OGM ..

Et faites régler la climatisation, il fait bien chaud, ici !

 

 

Éternel Novice !  :baby:

Tueur de poneys !  :(

 

Faire simple .. c'est compliqué !

Faire compliqué .. c'est simple !

 

Un MOOC (cours en ligne - dont je ne suis pas l'auteur) gratuit sur la programmation en Obj-C et en Swift 3, démarrant le 14 Mars 2017 :

https://www.edx.org/...onnex-progios1x

 

Des dizaines d'heures de tutoriels vidéo en français (je ne suis pas l'auteur) pour apprendre à développer en Obj-C et Swift : http://pagesperso-sy...don/5I452-2014/

 

 


#15 Patyom

Patyom

    Cueilleur de cabosses

  • Membre
  • PipPipPip
  • 86 messages

Posté 18 juin 2017 - 20:54

Cool, je faire lire çà attentivement mais un peu plus tard, maintenant c'est à mon tour d'avoir un PB : avec un Congélateur qui refuse de se remettre en route et avec le temps que l'on a, c'est pas du gateau.

 

Merci A +



#16 Patyom

Patyom

    Cueilleur de cabosses

  • Membre
  • PipPipPip
  • 86 messages

Posté 20 juin 2017 - 08:56

Très bien, là, je comprends nettement avec facilité. Tu te doutes que j'ai encore des questions dessus !

 

Peut-on visionner le fichier "Fiches", pour voir comment c'est stocké ?

 

Dans ma future BDD j'ai des dates à inclure et bien entendu quand je vais faire une requête avec mois ou année en recherche, dons il faut que j'ajoute des positions dans ma fiche avec par exemple : une pour le Mois, une autre pour l'Année ? c'est bien comme cela que ça fonctionne ?

 

Oui je le demande car dans ma jeunesse dans ma BDD, chaque fiche avait une clé (ID) qui était créée par programme dans laquelle j'incluais les valeurs "AAMM", au fait, y-a-t'il une clé d'enregistrement ?

 

en tout cas merci



#17 Draken

Draken

    Mouleur de chocolats

  • Artisan chocolatier
  • PipPipPipPipPipPipPipPip
  • 8 800 messages
  • LocationParis

Posté 20 juin 2017 - 09:22

Très bien, là, je comprends nettement avec facilité. Tu te doutes que j'ai encore des questions dessus !

 

Peut-on visionner le fichier "Fiches", pour voir comment c'est stocké ?

 

Dans ma future BDD j'ai des dates à inclure et bien entendu quand je vais faire une requête avec mois ou année en recherche, dons il faut que j'ajoute des positions dans ma fiche avec par exemple : une pour le Mois, une autre pour l'Année ? c'est bien comme cela que ça fonctionne ?

 

Oui je le demande car dans ma jeunesse dans ma BDD, chaque fiche avait une clé (ID) qui était créée par programme dans laquelle j'incluais les valeurs "AAMM", au fait, y-a-t'il une clé d'enregistrement ?

 

Euh .. pas la moindre idée. Je ne connais pas grand chose aux bases de données, moi. Je découvre CoreData pratiquement en même temps que toi. Ma partie c’est plutôt le graphisme, les jeux vidéos, le game design, et l’écriture de tutos.


Garçon, servez-moi un Covfefe avec du lait de soja, sans OGM ..

Et faites régler la climatisation, il fait bien chaud, ici !

 

 

Éternel Novice !  :baby:

Tueur de poneys !  :(

 

Faire simple .. c'est compliqué !

Faire compliqué .. c'est simple !

 

Un MOOC (cours en ligne - dont je ne suis pas l'auteur) gratuit sur la programmation en Obj-C et en Swift 3, démarrant le 14 Mars 2017 :

https://www.edx.org/...onnex-progios1x

 

Des dizaines d'heures de tutoriels vidéo en français (je ne suis pas l'auteur) pour apprendre à développer en Obj-C et Swift : http://pagesperso-sy...don/5I452-2014/

 

 


#18 Céroce

Céroce

    Mouleur de chocolats

  • Contrôleur d'arômes
  • 5 324 messages
  • LocationSaint-Leu-d'Esserent / France

Posté 20 juin 2017 - 10:40

Peut-on visionner le fichier "Fiches", pour voir comment c'est stocké ?

Le stockage se fait (par défaut) dans une BdD SQLite, donc tu peux ouvrir le fichier avec un logiciel capable d'éditer les bases SQLite. Bon, après, quand tu verras la gueule de la base, tu vas vite comprendre que ce n'est pas fait pour ajouter des tables toi-même.

De toute façon, ce n'est pas la philosophie de Core Data: c'est un ORM (Object-Relationship Mapping), qui sert à traduire les Objets dans un stockage BdD relationnelle — ce qui est un problème en soi, si tu veux mon avis. Tu ne dois pas penser "BdD" mais "Objet".

Dans ma future BDD j'ai des dates à inclure et bien entendu quand je vais faire une requête avec mois ou année en recherche, dons il faut que j'ajoute des positions dans ma fiche avec par exemple : une pour le Mois, une autre pour l'Année ? c'est bien comme cela que ça fonctionne ?

J'ai un doute, il n'y a pas une type primitif Date dans Core Data ? (Pas le temps de vérifier).
 

au fait, y-a-t'il une clé d'enregistrement ?

Oui, mais tu n'y a pas accès. 
RenaudPradenc.com Je suis développeur iOS & Mac indépendant.

#19 Draken

Draken

    Mouleur de chocolats

  • Artisan chocolatier
  • PipPipPipPipPipPipPipPip
  • 8 800 messages
  • LocationParis

Posté 20 juin 2017 - 11:11

J'ai un doute, il n'y a pas une type primitif Date dans Core Data ?
 

Yes Sir !

Fichier(s) joint(s)

  • Fichier joint  data.png   94,16 Ko   1 téléchargement(s)

Garçon, servez-moi un Covfefe avec du lait de soja, sans OGM ..

Et faites régler la climatisation, il fait bien chaud, ici !

 

 

Éternel Novice !  :baby:

Tueur de poneys !  :(

 

Faire simple .. c'est compliqué !

Faire compliqué .. c'est simple !

 

Un MOOC (cours en ligne - dont je ne suis pas l'auteur) gratuit sur la programmation en Obj-C et en Swift 3, démarrant le 14 Mars 2017 :

https://www.edx.org/...onnex-progios1x

 

Des dizaines d'heures de tutoriels vidéo en français (je ne suis pas l'auteur) pour apprendre à développer en Obj-C et Swift : http://pagesperso-sy...don/5I452-2014/

 

 


#20 Joanna Carter

Joanna Carter

    Broyeur de fèves

  • Contrôleur d'arômes
  • 1 997 messages
  • LocationPlestin-les-Grèves (22)

Posté 20 juin 2017 - 11:22

Les dates se trient en CoreData. Il suffit de dire l'ordre dans un NSSortDescriptor lorsque tu demande les données.

 

Ce n'est pas nécessaire de séparer les composants







0 utilisateur(s) li(sen)t ce sujet

0 membre(s), 0 invité(s), 0 utilisateur(s) anonyme(s)