【发布时间】:2021-03-01 13:07:10
【问题描述】:
我正在使用List 来显示CoreData 一对多关系模型。该列表显示了计算的属性。当 NSManagedObject 更改时,计算属性不知道它。
假设People 有很多Books。就像下面的代码:
People+CoreDataProperties.swift
extension People {
@nonobjc public class func fetchRequest() -> NSFetchRequest<Contract> {
return NSFetchRequest<People>(entityName: "People")
}
@NSManaged public var peopleID: String?
@NSManaged public var name: String?
@NSManaged public var books: Set<Book>?
@NSManaged public var bookOrders: [String]
}
bookOrders 是书籍的有序 ID。
BookListView.swift
struct BookListView: View {
@state var people: People //this is from @FetchRequest
List {
ForEach(people.sortedBooks.indices, id:\.self) { index in
BookRowView(bookListItem: viewModel.books[index])
}
}
}
这是 People 的扩展:
extension People {
var sortedBooks: [Book] {
let contractMapping = books.reduce(into: [String: Book]()) { (result, book) in
result[book.bookID] = book
}
return bookOrders.map {
contractMapping[$0]
}.compactMap { $0 }
}
所以当我重新订购书籍时,即更新 bookOrders 或有添加新书籍的后台请求更新,那么我如何通知 BookListView 更新视图?
【问题讨论】: