问题描述
我想创建一些解决方案,允许使用新的 @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 (将#修改为@)