Dati principali risultati in un SwiftUI Selettore vista senza preselezione un'opzione

0

Domanda

Sto recuperando i dati dal Nucleo di Dati e la visualizzazione di un Selettore, questo punto di vista è costruito in SwiftUI. Ho lottato prima di ottenere la selezione per lavorare da il selettore, ma se mi preselezionare il primo oggetto da recuperare il mio risultato, in vista di inizializzazione, la selezione la selezione delle opere.

Quello che voglio è quello di essere in grado di caricare i miei dati in provetta, ma non preselezionare uno degli oggetti. Di nuovo, se posso aggiornare il codice riportato di seguito in modo che nulla viene preselezionata, quindi non posso selezionare nulla. Mi arriva alla schermata di opzioni, ma quando mi tocca, non succede nulla, ho solo ottenere quel piccolo flash sulla riga. Devo colpire il pulsante Indietro per tornare alla visualizzazione maschera.

Tutte le idee su come rendere il caricamento di Dati di base in un Selettore senza preselezione di una delle opzioni di lavoro?

-Grazie!

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

Migliore risposta

1

È possibile impostare la selectedAction ad un inesistente Actions in init(...) come questa:

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

che non si imposta un pre-selezionati oggetto della selezione.

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

Questo non solo crea un nuovo oggetto ogni volta?
lorem ipsum

sì, si creerà un nuovo Actions ogni volta, ma non si salva, a meno che specificamente si desidera salvarlo. È possibile controllare questo con l'aggiunta di .onAppear{ print("---> actions: \(actions.count)") }
workingdog

In altre lingue

Questa pagina è in altre lingue

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