SwiftUI CoreData - 如何更新获取请求和列表
Posted
技术标签:
【中文标题】SwiftUI CoreData - 如何更新获取请求和列表【英文标题】:SwiftUI CoreData - How to update the fetch request and the list 【发布时间】:2021-08-24 17:06:20 【问题描述】:我正在使用 CoreData 在 SwiftUI 中创建应用程序,但遇到了问题。在应用程序中,您可以将歌曲添加到收藏夹,它将被添加到列表(FavoriteSongsView)。在将歌曲添加到收藏夹之前,一切都很好。在 DetailView 中,我单击按钮和“heart.fill”图标,歌曲被添加到列表中。但是,如果我再次单击该图标以取消收藏该歌曲,它不会从列表中消失。我与它战斗了一点,但没有任何效果。能否请您指出问题的原因?
最喜欢的歌曲列表:
@Environment(\.managedObjectContext) var managedObjectContext
@FetchRequest(
entity: Song.entity(),
sortDescriptors: [NSSortDescriptor(keyPath: \Song.number, ascending: true)],
predicate: NSPredicate(format: "favorite <> 'false'")
) var songs: FetchedResults<Song>
var body: some View
NavigationView
VStack
List
ForEach(songs, id:\.self) song in
NavigationLink(destination: DetailView(song: song, isSelected: song.favorite))
HStack
Text("\(song.number). ") .font(.headline) + Text(song.title ?? "No title")
.listStyle(InsetListStyle())
.navigationTitle("Favorite")
详细视图:
struct DetailView: View
@State var song : Song
@State var isSelected: Bool
@State var wrongNumber: Bool = false
var body: some View
VStack
Text(song.content!)
.padding()
Spacer()
.navigationBarTitle("\(song.number). \(song.title ?? "No title")", displayMode: .inline)
.toolbar
ToolbarItemGroup(placement: .navigationBarTrailing)
HStack
Button(action:
song.favorite.toggle()
PersistenceController.shared.save()
isSelected=song.favorite
)
Image(systemName: "heart.fill")
.foregroundColor(isSelected ? .red : .blue)
Button(action:
alert()
)
Image(systemName: "1.magnifyingglass")
NavigationLink("DetailView", destination: DetailView(song: song, isSelected: isSelected))
.frame(width: 0, height: 0)
.hidden()
【问题讨论】:
【参考方案1】:使用这个NSPredicate
NSPredicate(format: "favorite = %d", false)
【讨论】:
非常感谢以上是关于SwiftUI CoreData - 如何更新获取请求和列表的主要内容,如果未能解决你的问题,请参考以下文章
在 SwiftUI 中更新 CoreData 时更新状态变量
SwiftUI 中的 CoreData:如何清楚地获取属性?
如何在 SwiftUI 中从 FetchedResults (CoreData) 中获取 NSOrderedSet
如何使用 SwiftUI 更新 Firebase 中的集合?