Základné Údaje výsledkov do SwiftUI Picker zobraziť bez preselecting možnosť

0

Otázka

Ja som načítaní údajov zo Základných Údajov a zobrazenie v Picker, toto zobrazenie je postavený v SwiftUI. Zápasil som na prvý dostať výber do práce z picker, ale zistil, keď som preselect prvý objekt od môjho priniesla výsledok, vzhľadom na to init, na výber výber diel.

To, čo chcem, je byť schopný načítať dáta do Picker, ale nie preselect jeden z objektov. Opäť, ak by som aktualizovať kód nižšie, takže nič nie je predbežne, potom nemôžem vybrať nič. Dostanem na obrazovku voľby, ale keď som na jednu, nič sa nedeje, len som si, že malý flash na riadok. Som narazila na tlačidlo Späť sa chcete dostať späť do formy zobrazenia.

Akékoľvek nápady, ako vytvoriť nakladanie Základných Údajov a do Picker bez preselecting jednu z možností práce?

-Vďaka!

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

Najlepšiu odpoveď

1

Mohli by ste nastaviť selectedAction na neexistujúcu Actions v init(...) ako toto:

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

že nebude nastaviť vopred vybraný objekt v picker.

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

Nebude to len vytvoriť nový objekt, zakaždým?
lorem ipsum

áno, bude vytvoriť nový Actions v každom čase, ale to nezachráni to, ak ste konkrétne chcete uložiť. Overiť si to môžete pridaním .onAppear{ print("---> actions: \(actions.count)") }
workingdog

V iných jazykoch

Táto stránka je v iných jazykoch

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