核心数据结果成SwiftUI选择器视而不preselecting一个选项

0

的问题

我获取数据,从核心数据并显示它在选择器,这种观点是建立在SwiftUI. 我尽力在第一个获得甄选工作,从选择器,却发现如果我预先选择的第一个对象从我提取的结果,在看的init,选择器选择的工作。

什么我想要的是能载我的数据转的选择器,但不预选对象之一。 再次,如果我更新代码下面所以什么都不是预先选定的,那么我不能选择任何东西。 我得到屏幕上的选择,但是,当我敲击一,什么也没发生,我只是得到那个小闪光在该行。 我要打回来按钮回的形式图。

任何想法,对于如何使装载核心数据纳入一个选择器不preselecting的选项之一的工作?

-谢谢!

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

最好的答案

1

你可以设定selectedAction到一个不存在的 Actionsinit(...) 是这样的:

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

这将不设置一个预先选定的对象的选择器。

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

不这只是创建一个新的对象的每一个时间?
lorem ipsum

是啊,这将创建一个新的 Actions 每一次,但它不会拯救它,除非你特别想要保存它。 你可以检查这个加入 .onAppear{ print("---> actions: \(actions.count)") }
workingdog

其他语言

此页面有其他语言版本

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