SwiftUI Редактировать элемент из списка с помощью CoreData - PullRequest
0 голосов
/ 18 февраля 2020

Я работаю над приложением списка и хотел бы иметь возможность редактировать детали элемента списка. Я использую CoreData для модели данных. Сейчас я застрял в том, как передать элемент данных из DetailView в EditItemView. Я обновил код до текущего состояния, в котором я нахожусь. В настоящее время я получаю сообщение об ошибке в DetailView в строке DetailView(myItem: item) предварительного просмотра. Правильно ли я установил @State для name и правильно передал @Binding? Я думаю, что моя ошибка заключается в том, что я передаю имя в EditItemView(name: self.$name) представлению редактирования. Мысли?

Детальный просмотр:

import CoreData
import SwiftUI

struct DetailView: View {
    @Environment(\.managedObjectContext) var moc
    @ObservedObject var myItem: Item

    @State private var name: String
    @State private var showingEditScreen = false

    var body: some View {
        NavigationView {
            VStack {
                Text(self.myItem.name ?? "Unknown Item")
                Text(self.myItem.attribute ?? "Unknown attribute")
            }
        }
        .navigationBarTitle(Text(myItem.name ?? "Unknown Item"), displayMode: .inline)
        .navigationBarItems(trailing:
            Button(action: {
                self.showingEditScreen.toggle()
            }) {
                Image(systemName: "square.and.pencil")
            }
        )
        .sheet(isPresented: $showingEditScreen) {
            EditItemView(name: self.$name).environment(\.managedObjectContext, self.moc)
        }
    }
}

struct DetailView_Previews: PreviewProvider {
    static let moc = NSManagedObjectContext(concurrencyType: .mainQueueConcurrencyType)

    static var previews: some View {
        let item = Item(context: moc)
        item.name = "Test item"
        item.attribute = "Test attribute"

        return NavigationView {
            DetailView(myItem: item)
        }
    }
}

Редактировать просмотр товара:

import CoreData
import SwiftUI

struct EditItemView: View {
    @Binding var name: String

    var body: some View {
        TextField("Enter Item Name", text: self.$name)
    }
}

struct EditItemView_Previews: PreviewProvider {
    static var previews: some View {
        EditItemView(name: .constant("ItemX"))
    }
}

1 Ответ

1 голос
/ 18 февраля 2020

Я бы сказал, что Item или NSManagedObject является ObservableObject.

, поэтому вы можете напрямую использовать элемент в представлении:

 struct EditItemView: View  {

     @ObservedObject var myItem : Item

      var body: some View {
       ...}

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