我希望我的应用程序定期获取新记录并将它们存储在核心数据中。我的 UI 上有一个标签,应该显示特定记录的元素数量,并且我希望随着更多记录添加到数据库中来更新该数字。作为练习,我想使用 Combine 来完成它。
当应用程序启动时,我能够显示数据库中的元素数量,但是当新数据进入数据库时,数字不会更新(我通过实现一个手动刷新的按钮验证了新数据正在添加用户界面)。
这是在启动时显示正确数量的元素但在添加新记录时不更新的代码:
let replayRecordFetchRequest: NSFetchRequest<ReplayRecord> = ReplayRecord.fetchRequest()
_ = try? persistentContainer.viewContext.fetch(replayRecordFetchRequest).publisher.count().map { String(format: Constants.Strings.playsText, $0) }.assign(to: \.text, on: self.playsLabel)
这是我改编的 WWDC 2019 Session 230 演讲的代码片段,但这根本不起作用(订阅者永远不会被解雇):
let replayRecordFetchRequest: NSFetchRequest<ReplayRecord> = ReplayRecord.fetchRequest()
if let replayRecords = try? replayRecordFetchRequest.execute() {
_ = replayRecords.publisher.count().map { String(format: Constants.Strings.playsText, $0) }.assign(to: \.text, on: self.playsLabel)
}