SwiftUI @fetchrequest не обновляет мой взгляд - PullRequest
0 голосов
/ 11 марта 2020

У меня есть представление, которое использует обертку @fetchrequest для извлечения из CoreData, однако оно работает нормально, но когда я редактирую данные в .sheet и возвращаюсь к представлению, данные не обновляются, пока я не уеду Вернись. Разве он не должен просто обновляться автоматически? Вот пример кода:

Список

import CoreData
struct Stories: View {
    @State var addStory = false
    @Environment(\.managedObjectContext) var moc
    @FetchRequest<Story>(
        entity: Story.entity(),
        sortDescriptors: []
    ) var stories: FetchedResults<Story>

    var body: some View {
        ScrollView(.vertical, showsIndicators: false) {

        ForEach(stories, id: \.self){ story in

                 GeometryReader { geometry in   
                            StoryCard(show: story.show,
                                    image: Image(uiImage: UIImage(data: story.image as! Data)!) ?? Image("deer3"),
                                title: story.title,
                                date:story.date,
                                locationTitle: story.locationTitle ?? "",
                                text: story.text,
                                    timeOfDay: timeOfDayData[Int(story.tod)],
                                weather: weatherData[Int(story.weather)],
                                story: story)
                            .environment(\.managedObjectContext, self.moc)
                            .offset(y: story.show ? -geometry.frame(in: .global).minY : 0)

                 }.frame(height: story.show ? screen.height : 280)
                        .frame(maxWidth:story.show ? .infinity : screen.width-60)
                        .background(Color("Tan"))
                    .zIndex(story.show ? 2.0 : 0.5)

                }
            }

        }

Объект

struct StoryCard: View {  

@State var show:Bool
@State var image:Image = Image("deer1")
@State var title = "Story title"
@State var date:Date = Date()
@State var locationTitle = "Priddis"
@State var location:CLLocationCoordinate2D = CLLocationCoordinate2D()
@State var text = "Lorem ipsum valor decor vassus sit amet."
@State var timeOfDay = timeOfDayData[0]
@State var weather = weatherData[0]
@State var edit = false

@ObservedObject var story:Story

@Environment(\.managedObjectContext) var moc

var body: some View {

....

Button(action:{
self.show.toggle()
self.moc.performAndWait {
self.story.show = self.show
try? self.moc.save()
}
self.edit.toggle()
}){
Text("Edit")
}.sheet(isPresented: self.$edit) {
 ImagePickerTest(addStory: self.$edit, story:self.story).environment(\.managedObjectContext, self.moc)
}

....
}
}

Редактировать

struct Editor: View{
...
@State var story:Story?
@Environment(\.managedObjectContext) var moc

 var body: some View {
...
Button(action:{
self.moc.performAndWait {
   self.story!.title = self.storyName
   self.story!.date = self.date
   self.story!.locationTitle = self.locationTitle
   self.story!.tod = Int16(self.tod)
   self.story!.weather = Int16(self.weather)
   self.story!.text = self.text
   self.story!.show = false
   self.story!.latitude = self.centerCoordinate.latitude
   self.story!.longitude = self.centerCoordinate.longitude
   self.story!.image = self.inputImage?.pngData()

   try? self.moc.save()

}){
Text("Save")
}
...

}

}

Любая помощь очень ценится. Спасибо!

1 Ответ

0 голосов
/ 12 марта 2020

Для тех, кто заинтересован, я действительно понял это. Я передавал отдельные переменные в свой объект Story вместо того, чтобы использовать переменные из переменной истории @observedobject (Picard facepalm)

...