如何解决@FetchRequest 模拟使用标准观察记录计数
我想创建一些解决方案,允许使用新的 @propertyWrapper
机制按特定条件观察记录数。我想找到优雅的方法来解决它。
如果我使用 Environment 的实例,我会遇到这样的错误:
由于未捕获的异常“NSinvalidargumentexception”而终止应用,原因:“+entityForName: nil 不是用于搜索实体名称“Todo”的合法 NSPersistentStoreCoordinator'
我的解决方案:
@propertyWrapper class FetchCountRequest<Entity> where Entity: NSFetchRequestResult {
private var bag = Set<AnyCancellable>()
var wrappedValue: Int = .zero
init(request: NSFetchRequest<Entity>) {
do {
wrappedValue = try PersistenceController.shared.mainContext.count(for: request)
NotificationCenter.default
.publisher(for: NSManagedobjectContext.willSaveObjectsNotification,object: PersistenceController.shared.mainContext)
.compactMap { _ -> Int? in
try? PersistenceController.shared.mainContext.count(for: request)
}
.sink { [weak self] value in
self?.wrappedValue = value
}
.store(in: &bag)
} catch {
print(error)
}
}
}
用法:
struct MyView: View {
@FetchCountRequest(request: Todo.fetchRequest())
var todoCount: Int
var body: some View {
Text("\(todoCount)")
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。