SwiftUI视图多动态FetchRequest初始化错误排查求助
问题排查与解决方案
你的问题根源在于:当视图中存在多个同类型的@FetchRequest(比如这里两个针对Action实体的请求)时,若不为每个请求指定唯一的id参数,SwiftUI会将它们视为同一个请求,导致复用相同的查询条件,最终返回完全一致的结果。
修复代码
在初始化每个FetchRequest时,添加唯一的id参数,让SwiftUI能够区分不同的查询请求:
@FetchRequest var dreamsForTheUser: FetchedResults<Dream> @FetchRequest var actionsForTheUser: FetchedResults<Action> @FetchRequest var actions: FetchedResults<Action> init(filterForTheUser: String, filter: String) { // 为每个请求设置唯一ID,区分不同查询 _dreamsForTheUser = FetchRequest<Dream>( sortDescriptors: [], predicate: NSPredicate(format: "dreamID BEGINSWITH %@", filterForTheUser), id: "dreams_user_\(filterForTheUser)" ) _actionsForTheUser = FetchRequest<Action>( sortDescriptors: [], predicate: NSPredicate(format: "actionID BEGINSWITH %@", filterForTheUser), id: "actions_user_\(filterForTheUser)" ) _actions = FetchRequest<Action>( sortDescriptors: [], predicate: NSPredicate(format: "actionID == %@", filter), id: "action_single_\(filter)" ) }
额外检查点
- 确认Core Data实体中的属性名与Predicate中的完全匹配(比如
dreamID、actionID是否确实存在且为字符串类型) - 检查传递给
EditActionView的参数值:userViewModel.userID和action.actionID是否为预期的非空字符串 - 如果使用了自定义的
managedObjectContext,需要在FetchRequest初始化时显式指定(添加context: 你的上下文实例参数)
内容的提问来源于stack exchange,提问作者Tracy9988 Xu
相关产品推荐
相关产品推荐

