【问题标题】:SwiftUI How to get changes of computed Property of NSManagedObject subclassSwiftUI 如何获取 NSManagedObject 子类的计算属性的更改
【发布时间】: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 更新视图?

【问题讨论】:

    标签: ios core-data swiftui


    【解决方案1】:

    在 BookListView 中将您的人员声明为ObservedObject

    struct BookListView: View {
       @ObservedObject var people: People // << now View updates for any changes here
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-06
      • 2021-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多