Как правильно обновить объект CoreData в подробном представлении? - PullRequest
0 голосов
/ 12 апреля 2020

Я хочу иметь простое приложение с отсортированным списком элементов. При щелчке по каждому элементу открывается подробный вид, где при нажатии другой кнопки обновляется поле элемента, которое должно перерисовать исходный список.

Представление списка задается с помощью:

import SwiftUI
import CoreData

struct ContentView: View {

    @Environment(\.managedObjectContext) var context 

    @State private var itemName: String = ""

    // get all data, sorted by date
    @FetchRequest(
        entity: Item.entity(),
        sortDescriptors: [NSSortDescriptor(keyPath: \Item.lastEdited, ascending: true)]
    ) var allItems: FetchedResults<Item>



    var body: some View {

        NavigationView {
            List {
                ForEach (allItems) { item in
                    NavigationLink(destination: DetailView(item: item).environment(\.managedObjectContext, self.context)) {
                        Text(item.name ?? "No name given")
                    } // nav link

                }


            }
    }
}


, а подробное представление задается с помощью:


import SwiftUI
import CoreData


struct DetailView: View {


    @Environment(\.managedObjectContext) var context

    var item: FetchedResults<Item>.Element

    var body: some View {

        Button (action: {
            self.updateDate(item: self.item)

            }) {
                Text("Press me!")
            }

    } // body

    func updateDate(item: Item) {
        item.lastEdited = Date()
    } // func

} // DetailView



Нажатие кнопки «Нажмите меня» на подробном представлении заставляет обновление работать, и представление списка обновляется, но это происходит, когда я нажимаю кнопку:

  1. Отображается новый экран с подробным представлением
  2. Возвращается к представление списка

Почему (1) происходит? Как мне избежать этого?

У меня есть Item, определенный как Entity в моем xcdatamodeld

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...