Afficher un tableau avec ses rangs classés par date

nono77nono77 Membre
juillet 2018 modifié dans Objective-C, Swift, C, C++ #1

j essaie de créer une petite application perso pour gérer mon retard quotidien dans mon travail
mais voilà j ai un petit soucis.
Comment faire pour ajouter une variable plusieurs fois dans un tableau mais avec des valeurs différentes
ex: mercredi 18 juillet 2018 12 18
jeudi 19 juillet 2018 10 6
vendredi 20 juillet 2018 25 8
Pour ensuite les afficher dans un tableview du plus récent au plus ancien par rapport a la date
pour l instant j arrive seulement a enregistrer une entrée dans mon tableau et a chaque nouvel essai cela efface l ancienne entrée
ce qui fait que je suis toujours avec une ligne a mon tableau ainsi que dans mon tableview
je songe a m orienté vers le tricot sans doute plus facile....

Réponses

  • Qu'est-ce que tu rentres exactement comme données ? Normalement avec un tableau, il n'a pas d'unicité sur les éléments.
    Pourrait-on voir un peu de code ?

    Je ne sais pas si tu effaces ton Array à chaque fois, si tu utilises un Set, un Dictionary.

    De plus, j'espère que tu enregistres dans ton tableau des (NS)Date objects et pas des Strings.

  • j enregistre dans ce tableau des Strings

  • Joanna CarterJoanna Carter Membre, Modérateur

    Pourquoi quand tu pourrait utiliser et trier les dates?

  • pour ajouter des données j ai créer cette fonction
    func ajouterChanson() {
    chansons = Details
    details = Details(date: dateDuJour!, retard: retardGeneneral!, equipe: valeurEquipe!)

    chansons.append(details!)
    }

  • Joanna CarterJoanna Carter Membre, Modérateur
    juillet 2018 modifié #6

    N'utilises pas les ! Comme ça !!!

  • Tu fais chansons = Details. Je ne sais pas ce qu'est Details, du coup, la valeur de chansons est modifiée. Je pense donc que tu "reset" à chaque fois chansons, d'où le fait que tu n'aies à la fin que le résultat de chansons.append(details!)

  • chansons est un tableau de type Details

  • DrakenDraken Membre
    juillet 2018 modifié #9

    Tu dois utiliser un objet de type Date pour gérer tes dates. Il est spécialement conçu pour ça, et permet toutes sortes de manipulations très utiles (tri, comparaison, conversion des dates dans différentes langues, etc..). Il permet aussi d'entrer une date en utilisant un composant graphique comme PickerDate.

    J'ai fait une petite démo à l'arrache, avec un pickerView, et deux boutons. La présentation est moche parce j'ai juste posé les objets graphiques sur l'écran, sans définir de contraintes Storyboard.

    import UIKit
    
    class Details {
        var date   : Date
        var retard : Int
        var equipe : Int
    
        init (date:Date, retard:Int, equipe:Int) {
            self.date = date
            self.retard = retard
            self.equipe = equipe
        }
    }
    
    class ViewController: UIViewController {
    
        @IBOutlet weak var datePicker: UIDatePicker!
    
        var listeDetails = [Details]()
    
        override func viewDidLoad() {
            super.viewDidLoad()
        }
    
        @IBAction func actionEnregistrerDate(_ sender: Any) {
            // Lecture de la date courante du Picker
            let date = datePicker.date
            // Création du détail
            let detail = Details(date: date, retard: 0, equipe: 0)
            // Ajout du détail à la liste
            listeDetails.append(detail)
            // Tri du tableau en fonction des Dates
            listeDetails = listeDetails.sorted(by: { $0.date < $1.date })
        }
    
    
        @IBAction func actionAfficherDates(_ sender: UIButton) {
    
            print ("--")
            // Lecture du tableau
            for detail in listeDetails {
                // Lecture de la Date
                let date = detail.date
    
                // Conversion jour à la norme française
                // exemple : "vendredi 27 juillet 2018"
                let jour = DateFormatter.localizedString(
                    from: date,
                    dateStyle: .full,
                    timeStyle: .none)
    
                // Conversion heure norme française
                // exemple : 14:45
                let heure = DateFormatter.localizedString(
                    from: date,
                    dateStyle: .none,
                    timeStyle: .short)
    
                // Affichage des données
                print ("Date : ", jour)
                print ("Heure : ", heure)
    
                // Lecture des informations complémentaires
                // let retard = detail.retard
                // let equipe = detail.equipe
    
                // print ("Retard : ", retard)
                // print ("Equipe : ", equipe)
            }
        }
    
    }
    

    J'utilise l'opérateur de tri de Swift pour classer les Dates.

         // Tri du tableau en fonction des Dates
         listeDetails = listeDetails.sorted(by: { $0.date < $1.date })
    

    Il permet de trier un tableau d'objets selon une condition définie entre les { }. La formule que j'utilise indique que l'élément de rang n (symbolisé par $0) doit avoir une date inférieure à celle de l'élément n+1 (symbolisé par $1).

  • merci draken
    je vais étudier cela de près et essayer de comprendre tout ça
    merci encore

  • Je me rend que j'ai oublié d'expliquer le fonctionnement de la petite démo :

    • Sélection d'une date quelconque avec le PickerDate
    • Clic sur le bouton "Enregistrer une Date" pour l'enregistrer dans la liste des Dates, et déclencher un tri automatique du tableau
    • Clic sur le bouton "Afficher les Dates" pour imprimer dans le simulateur la liste triée des dates. J'avais la flemme de taper le code pour faire l'affichage dans une UITableView.
Connectez-vous ou Inscrivez-vous pour répondre.