Bază de Date cu rezultatele într-un SwiftUI Selector de vedere, fără a preselectarea o opțiune

0

Problema

Sunt preluarea datelor din Bază de Date și afișarea într-un Picker, acest punct de vedere este construit în SwiftUI. M-am luptat în primul rând pentru a obține o selecție pentru a lucra de la selector, dar nu a găsit dacă am preselecta primul obiect dintr-mi aduce urmare, în opinia lui init, selectorul de selecție de lucrări.

Ceea ce vreau este de a fi capabil de a încărca datele mele în Picker, dar nu preselecta unul dintre obiecte. Din nou, daca fac update codul de mai jos astfel încât nimic nu este preselectat, atunci eu nu pot selecta nimic. Am ajunge la ecranul de opțiuni, dar atunci când am apăsați unul, nu se întâmplă nimic, am doar acel mic flash pe rând. Trebuie să apăsați pe butonul Înapoi pentru a obține înapoi în formă vedere.

Orice idei pentru modul de a face de încărcare Bază de Date într-un Selector fără preselectarea una dintre opțiunile de munca?

-Multumesc!

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

Cel mai bun răspuns

1

Ai putea seta selectedAction la un non-existent Actions în init(...) astfel:

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

că nu va stabili un pre-obiectul selectat în selector.

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

Nu doar a crea un obiect nou de fiecare dată?
lorem ipsum

da, se va crea un nou Actions de fiecare dată, dar aceasta nu va salva, dacă nu doriți în mod special să-l salveze. Puteți verifica acest lucru prin adăugarea .onAppear{ print("---> actions: \(actions.count)") }
workingdog

În alte limbi

Această pagină este în alte limbi

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