将列表中的CoreData对象用作环境对象

时间:2019-08-27 18:31:04

标签: core-data swiftui swiftui-list

我目前正在使用SwiftUI创建News-Feed-Reader应用程序。

我正在获取供稿项并将其存储在CoreData中

我想在包含导航到详细视图的导航链接的列表中显示对象,并在单击它们时自动将它们标记为已读。

我目前正在获取对象,并将其放入ObservableObject中。 这是ObservableObject类:

final class FeedItem: ObservableObject, Hashable {
    static func == (lhs: FeedItem, rhs: FeedItem) -> Bool {
        return lhs.item.pubDate == rhs.item.pubDate && lhs.item.articleUrl == rhs.item.articleUrl
    }

    func hash(into hasher: inout Hasher) {
        hasher.combine(item.articleUrl)
    }

    let objectWillChange = PassthroughSubject<Void, Never>()


    init(item: NewsItem) {
        self.item = item
    }
    // NewsItem is the Managed Object
    var item: NewsItem

    var bookmarked: Bool {
        set {
            //This function fetches the Object and marks it as bookmarked
            DatabaseManager().markAs(item: item, .read, newValue)
            self.item.bookmarked = newValue
        }
        get {
            self.item.bookmarked
        }
    }

    var read: Bool {
        set {
            //This function fetches the Object and marks it as read
            DatabaseManager().markAs(item: item, .read, newValue)
            self.item.read = newValue
        }
        get {
            self.item.read

        }
    }

}

目前,我正在创建一个包含所有ObservableObjects数组的环境Object(EO) 该EO传递到列表中,每当Im单击某个项目Im时,将Im的读取值设置为true即可更改核心数据对象。

这是列表:

@EnvironmentObject var feed: // THe array of ObservableObjects
List() {
    ForEach(feed.items.indices, id:\.self) { i in
        Button(action: {
            self.feed.items[i].read = true
            self.selectedItem = i
            self.showDetail = true
        }) {
            ListFeedItem(item: self.$feed.items[i])
        }
    }
}

此方法相当慢。每当我打开“详细信息视图”并返回几秒钟后,列表项就需要花费几秒钟的时间刷新。

关于如何改善这一点的任何想法?

0 个答案:

没有答案