Base de Données des résultats dans un SwiftUI Sélecteur de point de vue, sans présélectionner une option

0

La question

Je suis d'extraire des données de Base de Données et les afficher dans un Sélecteur de ce point de vue est construit en SwiftUI. J'ai eu du mal au début pour obtenir le choix de travailler à partir du sélecteur, mais trouvé si je présélectionner le premier objet de mon extraire les résultats, du point de vue de l'init, le sélecteur de sélection des œuvres.

Ce que je veux, c'est être en mesure de charger mes données dans le Sélecteur, mais pas présélectionner un des objets. Encore une fois, si je mettre à jour le code ci-dessous donc, rien n'est présélectionné, alors je ne peux pas choisir n'importe quoi. J'arrive à l'écran d'options, mais quand je touche, rien ne se passe, je viens d'obtenir que peu de flash sur la ligne. Je dois appuyer sur le bouton Back pour revenir à la vue de formulaire.

Toutes les idées sur la façon d'effectuer le chargement de Base de Données dans un Sélecteur sans présélectionnant l'une des options de travail?

-Merci!

import SwiftUI
import CoreData

struct RecordCreateview: View {
    @FetchRequest private var actions: FetchedResults<Actions>
    @State private var selectedAction: Actions

    init(context: NSManagedObjectContext) {
        let fetchRequest: NSFetchRequest<Actions> = Actions.fetchRequest()
        fetchRequest.sortDescriptors = [NSSortDescriptor(keyPath: \Actions.action, ascending: true)]
        fetchRequest.predicate = NSPredicate(value: true)
        self._actions = FetchRequest(fetchRequest: fetchRequest)
        do {
            let fetchResult = try context.fetch(fetchRequest)
            self._selectedAction = State(initialValue: fetchResult[0])
        } catch {
            fatalError("Problem fetching Action records.")
        }
    }
    
    var body: some View {
        NavigationView {
            Form {
                Picker("Select action", selection: $selectedAction){
                    ForEach(actions) { action in
                        if action.title == true {
                            Text("\(action.action!)").tag(action)
                        }
                    }
                }
            }
        }
    }
}
core-data ios picker swiftui
2021-10-26 20:12:53
1

La meilleure réponse

1

Vous pouvez définir la selectedAction à un non-existant Actions dans init(...) comme ceci:

self._selectedAction = State(initialValue: Actions(context: context))

qui ne sera pas mis en pré-objet sélectionné dans le sélecteur.

struct RecordCreateview: View {
    @FetchRequest private var actions: FetchedResults<Actions>
    @State private var selectedAction: Actions

    init(context: NSManagedObjectContext) {
        let fetchRequest: NSFetchRequest<Actions> = Actions.fetchRequest()
        fetchRequest.sortDescriptors = [NSSortDescriptor(keyPath: \Actions.action, ascending: true)]
        fetchRequest.predicate = NSPredicate(value: true)
        self._actions = FetchRequest(fetchRequest: fetchRequest)
        self._selectedAction = State(initialValue: Actions(context: context))  // <--- here
    }
    
    var body: some View {
        NavigationView {
            Form {
                Picker("Select action", selection: $selectedAction){
                    ForEach(actions) { action in
                        if action.title == true {
                            Text("\(action.action!)").tag(action)
                        }
                    }
                }
            }
        }
    }
}
2021-10-28 22:58:51

Ne cela il suffit de créer un nouvel objet à chaque fois?
lorem ipsum

ouais, il va créer un nouveau Actions à chaque fois, mais il ne la sauvera pas, sauf si vous souhaitez l'enregistrer. Vous pouvez le vérifier en ajoutant .onAppear{ print("---> actions: \(actions.count)") }
workingdog

Dans d'autres langues

Cette page est dans d'autres langues

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................