Problème avec .refreshable sur une List (SwiftUI/Json)

Hello à tous,

J’ai suivi le cours de Maxime au sujet de Json avec SwiftUI.
il me semble avoir suivi le tout à la lettre, le .task fait ce qu’il faut pour remplir ma liste avec le json que je récupère, mais le .refreshable cancel la fonction systématiquement.

Dans la console, j’obtiens:

Json failed - cancelled

eta ne rafraichi pas ma liste.

Une idée?

Merci à vous :slightly_smiling_face:

Voici mon code :

    func loadRadioList() async {
        guard let urlRadioList = URL(string: "xxxxxxxxxxxxxxxxxxxx") else { return }
        let request = URLRequest(url: urlRadioList)
        isLoading = true
        
        do {
            let (radioListData, response) = try await URLSession.shared.data(for: request, delegate: nil)
            if let httpResponse = response as? HTTPURLResponse,
               httpResponse.statusCode >= 200, httpResponse.statusCode < 300,
               let downloadedRadioList = try? JSONDecoder().decode([Station].self, from:radioListData) {
                self.stationList = downloadedRadioList.sorted {
                    $0.orderIndex < $1.orderIndex
                }
            } else {
                print("😣")
            }
        } catch {
            print("Json failed - \(error.localizedDescription)")
        }
        isLoading = false
    }

Salut @didier ,

Pourrais tu faire un coup de po via le debugger une fois refresh, sur les variables : request, radioListData et downloadedRadioList stp :slight_smile:

ps : rassure moi , tu as bien modifier : « xxxxxxxxxxxxxxxxxxxx » et mis une url valide ?

Hello @Nono92

oui oui, xxxxxxxx correspond bien à ma ressource :wink:

je ne sais pas comment utiliser po par contre et je ne trouve pas grand chose sur Google :confused:

@didier , tien j ai fais un gif :slight_smile:
CleanShot 2022-01-19 at 15.29.51

fais un step by step a partir de la ligne
let (radioListData, response) = try await URLSession.shared.data(for: request, delegate: nil)
avec ton deboggeur , tu verras ou ça peche :stuck_out_tongue:

2 « J'aime »

Merci @Nono92 !
je ne connaissais absolument pas ce mode de déboggage!

J’ai essayé de faire ce que tu m’a dit, mais je n’arrive pas « interroger » les variables qui sont dans le do {} avec po.
J’atterris dans un fichier système qui parle de thread avec plein d’hexadécimales quand j’avance avec le step by step.

1 « J'aime »

ca, c est ta pile d’exécution :slight_smile:

As-tu mis un breackpoint (point d’arret) dans ton programme a la ligne :

let (radioListData, response) = try await URLSession.shared.data(for: request, delegate: nil)

CleanShot 2022-01-19 at 17.21.46

1 « J'aime »

absolument, mais quand j’arrive sur le breakpoint, il ne connais pas encore les variables. Si je passe au step suivant, je tombe dans la pile d’exécution et de là, plus possible de rien interroger.

1 « J'aime »

Fais des into plutot que des step !