Dados principais resultados em uma SwiftUI Seletor de modo de exibição sem pré-selecionar uma opção

0

Pergunta

Eu sou a obtenção de dados do centro de Dados e exibi-lo em um Seletor, este ponto de vista é construído em SwiftUI. Passei em primeiro lugar para começar a seleção para o trabalho do seleccionador, mas se eu selecionar o primeiro objeto de minha busca resultado, na opinião de inicialização, o selecionador de seleção de obras.

O que eu quero é ser capaz de carregar os meus dados para o Selecionador, mas não pré-selecionar um dos objetos. Novamente, se eu atualizar o código abaixo para que nada é pré-selecionado e, em seguida, eu não consigo selecionar nada. Eu ir para a tela de opções, mas quando eu toque em um, nada acontece, eu só obter pouco de flash na linha. Eu tenho que pressionar o botão Voltar para voltar para a vista de formulário.

Alguma idéia de como fazer o carregamento de Dados de base para um Selecionador, sem pré-selecionar uma das opções de trabalho?

-Obrigado!

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

Melhor resposta

1

Você pode definir o selectedAction a um inexistente Actions no init(...) como esta:

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

que não vai definir um objecto pré-seleccionado no selecionador.

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

Será que isto não basta criar um novo objeto de cada vez?
lorem ipsum

sim, ele irá criar um novo Actions a cada vez, mas ele não vai salvá-lo, a menos que você especificamente deseja salvá-lo. Você pode verificar isso através da adição de .onAppear{ print("---> actions: \(actions.count)") }
workingdog

Em outros idiomas

Esta página está em outros idiomas

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