这是我在这个论坛上的第一篇文章,真的希望有人能在这里帮助我。我将非常感谢任何帮助!
我正在使用 Swift UI(之前从未使用过 UIKit)编写我的第一个应用程序,我想稍后发布。
这也是我第一个实现 CoreData 的应用程序。
例如,我使用以下实体:
家庭,人
- 1 人可拥有 1 个家庭
- 1 家庭可以有很多人
我的应用程序结构如下:
内容视图:
包含一个 TabView,其中包含 2 个其他视图。一个设置视图和一个带有 LazyVGrid 的视图。
LazyVGrid 视图:
此视图显示每个家庭的 GridItem。我通过以下 Fetchrequest 获得家庭:
@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 都通过 NavigationLink 链接到“FamilyDetailView”。所以我通过家庭如下:
NavigationLink(destination: FamilyDetailView(family: family).environment(\.managedObjectContext, self.viewContext), label: {Text("Family Name")
在 FamilyDetailView 中,我得到了带有属性包装器的 Family:
@State var family : Family
在这个 FamilyDetailView 中是我遇到的问题。
在这里,我还有一个 LazyVGrid,它为 GridItem 中的家庭中的每个人显示 1 个 NavigationLink。在这个 GridItem 中,我还展示了 Person 的“名称”。
当点击 NavigationLink 时,我会到达最后一个视图,即 PersonDetailView。此视图获取 Person,它也是与 Family 实体有关系的实体。
我通过它如下:
NavigationLink(
destination: PersonDetailView(person: person),
label: {Text("Person")})
在 PersonDetailView 中,我现在更改人名并将更改的内容保存到 CoreData。
保存更改没有问题,问题是当我返回时,使用 NavigationView 中的 topleading 后退按钮,视图没有更新。我必须重新启动应用程序才能看到更改..
我知道问题必须与传递数据有关,但我无法弄清楚我做错了什么。
我真的很感谢所有试图帮助我的人!
非常非常感谢你!!