मैं एक कोरडाटा एक-से-अनेक संबंध मॉडल प्रदर्शित करने के लिए List का उपयोग कर रहा हूं। सूची ने गणना की गई संपत्ति को प्रदर्शित किया। जब NSManagedObject बदल दिया गया था, तो गणना की गई संपत्ति इसके बारे में नहीं जानती है।

मान लें कि People में कई Book हैं। नीचे दिए गए कोड की तरह:

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 पुस्तकों की क्रमित आईडी है।

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])
       }
   }
    
}

यहाँ लोगों का विस्तार है:

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 दृश्य को अपडेट कैसे कर सकता हूं?

1
William Hu 18 नवम्बर 2020, 12:16

1 उत्तर

सबसे बढ़िया उत्तर

BookListView के अंदर अपने लोगों को ObservedObject घोषित करें

struct BookListView: View {
   @ObservedObject var people: People // << now View updates for any changes here
0
davidev 18 नवम्बर 2020, 09:47