Problème de preview SwiftUI CoreData XCode13

Bonjour, je me demandais comment vous faisiez pour que vos preview sur SwiftUI fonctionnent lorsque vous utilisez CoreData.

Dans mon cas, les lists fonctionnent sans soucis. Par contres quand je créé une seconde view qui sert de formulaire, tout fonctionne jusqu’au moment où je créé la donnée qui passe en paramètre et que je l’intègre dans l’interface (je sais pas si je suis très clair)

Par exemple, j’ai une première View qui affiche une liste d’Actes. Puis, je fais un NavigationLink qui m’amène vers la View qui affiche les détails de cet acte et permet de les éditer. La j’attends en paramètre obligatoire un objet Acte (Class Acte) et c’est à partir de cet objet passé en paramètre que je peux afficher les données et les mettre à jour dans ma base CoreData.

Du moment où mon interface en SwiftUI va s’appuyer sur un élément de cet objet en paramètre, je ne peux plus générer ma vue. Mais le code fonctionne très bien. SI je lance une Preview depuis la liste et que je clique dessus, ma seconde View s’ouvre sans soucis.

Voici ce que je fais pour ne plus avoir l’erreur de compilation avec le preview :

struct ActeCreate_Previews: PreviewProvider {
    static var previews: some View {
            let acte =  Acte()
            ActeView(showSheetView: .constant(false), acte: acte, patient: nil)
                .environment(\.managedObjectContext, PersistenceController.preview.container.viewContext)
        }
    }

Ici, c’est la variable que j’attends.
Elle est optionnelle car je me sers de cette variable pour savoir si un acte est passé ou non, et s’il n’est pas passé, je considère que je suis en mode « Création » donc je ne charge rien et au moment d’enregistrer, je vais créer un nouvel acte plutôt que de modifier celui qui a été passé en paramètre.
let acte: Acte?

J’ai un State qui assure le lien entre la valeur et SwiftUI
@State **private** **var** resumeSeance = ""

Et j’affiche le contenu, ou je le récupère selon, dans un TextField
TextField("Résumé de séance", text: $resumeSeance)

L’idéal serait d’isoler CoreData loin de tes vues comme on l’a vu dans le cours :grin:

Comme ça dans tes preview tu ne donnes que des objets simples qui n’ont aucun rapport avec CoreData.

2 « J'aime »

C’est dans le cours « Les nouveautés de iOS 13 et Swift 5 » ça ? :grimacing:

@Amgfrit : c’est plutôt dans le cours iOS 14/SwiftUI. Le chapitre sur CoreData justement, il commence à partir de cette vidéo : Utiliser une base de données (CoreData)