Los Datos principales de los resultados en un SwiftUI Selector de vista sin una selección previa de una opción

0

Pregunta

Estoy obtención de datos de los Datos Básicos y los muestra en un Selector, este punto de vista es construido en SwiftUI. Me costó al principio, para obtener la selección para el trabajo del seleccionador, pero si me preseleccionar el primer objeto de mi recuperar el resultado, en la vista de inicio (init), el selector de selección de obras.

Lo que yo quiero es ser capaz de cargar mis datos en el Selector, pero no preseleccionar uno de los objetos. De nuevo, si puedo actualizar el código de abajo, por lo que nada está preseleccionada, entonces no puedo seleccionar nada. Llego a la pantalla de opciones, pero cuando me toque uno, no pasa nada, acabo de conseguir que el pequeño flash en la fila. Tengo que golpear el botón Atrás para volver a la vista de formulario.

Alguna idea de cómo hacer la carga de Datos Básicos en un Selector sin una selección previa de una de las opciones de trabajo?

- ¡Gracias!

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

Mejor respuesta

1

Se podría establecer la selectedAction a un inexistente Actions en init(...) como este:

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

que no se establece un pre-objeto seleccionado en el 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

Esto no sólo crea un nuevo objeto en cada momento?
lorem ipsum

sí, va a crear una nueva Actions cada vez, pero no va a salvar, a menos que específicamente desea guardarlo. Usted puede comprobar esto mediante la adición de .onAppear{ print("---> actions: \(actions.count)") }
workingdog

En otros idiomas

Esta página está en otros idiomas

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