แกนกลางข้อมูลผลใน SwiftUI Picker องมุมมองโดยไม่มี preselecting ทางเลือก

0

คำถาม

ฉันกำลังทำการดึงข้อมูลข้อมูลจากแกนกลางข้อมูลและแสดงมันอยู่ใน Picker นี่คือมุมมองสร้างใน SwiftUI. ฉันกำลังต่อสู้ในตอนแรกที่จะได้ส่วนที่เลือกไว้ทำงานอกจาก picker แต่เจอถ้าฉันเลือกแรกวัตถุจากของฉันอข้อมูลผลในมุมมองขอ init ที่ picker การเลือกการทำงาน

สิ่งที่ฉันต้องการคือให้สามารถโหลดข้อมูลของผเข้าไปใน Picker แต่ไม่ใช่กลุ่มเส้นขอบหนึ่งในวัตถุ. อีกครั้งถ้าฉันปรับปรุงที่รหัสทางด้านล่าดังนั้นไม่มีอะไร preselected แล้วฉันไม่สามารถเลือกอะไรเลย ฉันต้องจอภาพของตัวเลือก,แต่ตอนที่ฉันดักฟังหนึ่ง,ไม่มีอะไรเกิดขึ้นฉันแค่เอามันน้อยแฟลชบจองโซนเลย ฉันต้องชนกลับมาเพื่อให้กลับไปที่รูปแบบมุมมอง

มีไอเดียสำหรับวิธีที่จะทำให้การโหลดแกนหลักของข้อมูลเข้า Picker โดยไม่มี 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 จะไม่ existent Actions ใน init(...) เหมือนนี้:

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

มันจะไม่มีการตั้งค่าก่อนที่เลือกวัตถุอยู่ใน picker.

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ý
..................................................................................................................

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่