使用提取请求的视图不会在更改时更新



这是我第一次来到这个论坛,真的希望有人能在这里帮助我。如果有任何帮助,我将不胜感激!

我正在用Swift UI编写我的第一个应用程序(以前从未使用过UIKit(,我想稍后发布

这也是我第一个实现了CoreData的应用程序。

例如,我使用以下实体:

家庭,个人

  • 一个人可以有一个家庭
  • 1家庭可以有很多人

我的应用程序结构如下:

ContentView:

包含一个TabView和另外两个视图。一个设置视图和一个带有LazyVGrid的视图。

LazyVGrid视图:

此视图显示每个族的GridItem。我通过以下获取请求获得家庭:

@Environment(.managedObjectContext) private var viewContext
// These are the Families from the FetchRequest
@FetchRequest(entity: Family.entity(),
sortDescriptors: [NSSortDescriptor(keyPath: Family.created, ascending: false)]
) var families: FetchedResults<Family>

每个GridItem都链接到";FamilyDetailView;通过NavigationLink。所以我把这个家庭称为:

NavigationLink(destination: FamilyDetailView(family: family).environment(.managedObjectContext, self.viewContext), label: {Text("Family Name")

在FamilyDetailView中,我获得了带有属性包装器的族:

@State var family : Family

在这个家庭中,DetailView是我遇到的问题。

这里我还有一个LazyVGrid,它在GridItem中为家庭中的每个人显示1个NavigationLink。在这个GridItem中;name";个人的。

当点击NavigationLink时,我会进入最后一个视图,PersonDetailView。此视图获取个人,该个人也是与家庭实体有关系的实体。

我按如下方式传递:

NavigationLink(
destination: PersonDetailView(person: person),
label: {Text("Person")})

在PersonDetailView中,我现在更改了人名,并将更改后的保存到CoreData。

更改保存起来没有问题,问题是当我使用NavigationView中的topreading back按钮返回时,视图不会更新。我必须重新启动应用程序才能看到更改。。

我知道问题出在传递数据上,但我不知道我做错了什么。

我真的很感激每一个帮助我的人!

非常非常感谢!!

CoreData对象是引用类型,即类,符合ObservableObject协议,因此不使用ObservedObject来状态包装相应的属性,如

@ObservedObject var family : Family

非常感谢,这对我帮助很大。FamilyDetail视图正在使用该修复程序进行更新。只有一件事不会更新。我有一个";FamilyRowView;它显示在我家LazyVGrid中的每个GridItem中。这现在也得到了使用"@ObservedObject var family:family"但是仍然没有更新。有什么想法吗?非常感谢!

FamilyListView:

NavigationLink(destination: FamilyDetailView(family: family)
.environment(.managedObjectContext, self.viewContext),
label: {**FamilyRowView**(family: family)
.environment(.managedObjectContext, self.viewContext)})

FamilyRowView:

struct FamilyRowView: View {
@Environment(.managedObjectContext) private var viewContext
@ObservedObject var family : Family

var body: some View {

它似乎与其他不起作用的视图相同,但它不会更新视图。。

最新更新