Wyniki podstawowych danych są wyświetlane w oknie wyboru SwiftUI bez uprzedniego wyboru opcje

0

Pytanie

Czerpię dane z danych podstawowych i отображаю ich w oknie wyboru, to widok jest wbudowana w SwiftUI. Najpierw starałem się ze wszystkich sił próbował zmusić wybór pracować za pomocą narzędzia wyboru, ale okazało się, że, jeśli wstępnie wybiorę pierwszy obiekt z wynikowego na początku prezentacji, wybór narzędzia wyboru zadziała.

Co chcę, to mieć możliwość przesłać swoje dane w narzędzie do wyboru, ale nie wybrać wstępnie jeden z obiektów. Ponownie, jeśli mogę zaktualizować poniższy kod, aby nic nie zostało wybrane z góry, nic nie mogę wybrać. Podchodzę do ekranu opcji, ale gdy klikam na jeden z nich, nic się nie dzieje, ja po prostu dostaję tę małą lampę błyskową w wierszu. Muszę nacisnąć przycisk "Wstecz", aby powrócić do formy.

Jakieś pomysły o tym, jak sprawić, by pracować pobieranie danych podstawowych w selektor bez uprzedniego wyboru jednego z wariantów?

-Dziękuję!

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

Najlepsza odpowiedź

1

Można ustawić wybrane działania na nieistniejące Actions w init(...) podobny do tego:

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

to nie doprowadzi do instalacji wstępnie wybranego obiektu w oknie wyboru.

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

Czy to nie będzie po prostu tworzyć nowy obiekt za każdym razem?
lorem ipsum

tak, to stworzy nowy Actions za każdym razem, ale to nie uratuje go, jeśli specjalnie nie chcesz go zapisać. Można to sprawdzić, dodając .onAppear{ print("---> actions: \(actions.count)") }
workingdog

W innych językach

Ta strona jest w innych językach

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