Temel Veriler, bir seçeneği önceden seçmeden SwiftUİ Seçici görünümüne dönüşür

0

Soru

Çekirdek Verilerden veri alıyorum ve bir Seçicide görüntülüyorum, bu görünüm Swiftui'de yerleşik. Seçimin seçiciden çalışmasını sağlamak için ilk başta mücadele ettim, ancak ilk nesneyi getirme sonucumdan önceden seçersem, görünümün init'inde seçici seçimin işe yaradığını gördüm.

İstediğim, verilerimi Seçiciye yükleyebilmek, ancak nesnelerden birini önceden seçmemek. Yine, hiçbir şey önceden seçilmeyecek şekilde aşağıdaki kodu güncellersem, hiçbir şey seçemem. Seçenekler ekranına ulaşıyorum, ama birine dokunduğumda hiçbir şey olmuyor, sadece satırdaki o küçük flaşı alıyorum. Form görünümüne geri dönmek için Geri düğmesine basmam gerekiyor.

Seçici seçenekler eserin bir preselecting olmadan Çekirdek Veri yükleme yapmak için herhangi bir fikir?

- Teşekkürler!

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

En iyi cevabı

1

Selectedaction'ı varolmayan olarak ayarlayabilirsiniz Actions içinde init(...) bunun gibi:

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

bu, seçicide önceden seçilmiş bir nesneyi ayarlamaz.

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

Bu her seferinde yeni bir nesne yaratmayacak mı?
lorem ipsum

evet, yeni bir şey yaratacak. Actions her seferinde, ancak özellikle kaydetmek istemediğiniz sürece onu kurtarmaz. Bunu ekleyerek kontrol edebilirsiniz .onAppear{ print("---> actions: \(actions.count)") }
workingdog

Diğer dillerde

Bu sayfa diğer dillerde

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