Swift中如何将变量传入FetchRequestController?
在FetchRequestController的Predicate中使用自定义变量
我看你已经定义了subuserID变量,想要把它整合到Core Data查询的谓词里对吧?这事儿不难,我帮你调整代码,顺便修正了原代码里的拼写小错误(比如把fecth改成规范的fetch):
调整后的完整代码片段
var subuserID : String = "0" lazy var fetchResultsControllerDocList : NSFetchedResultsController<DocumentTypeList> = { let fetchRequest : NSFetchRequest<DocumentTypeList> = DocumentTypeList.fetchRequest() // 把subuserID加入谓词,这里假设你需要同时满足两个条件:dltPresent为true + 匹配subuserID // 如果只需要单一条件,删掉对应的逻辑即可 let predicate = NSPredicate(format: "dltPresent == %@ AND subuserID == %@", NSNumber(value: true), subuserID) let loggedUser = Auth.auth().currentUser let userId = loggedUser?.uid // 把谓词绑定到查询请求上 fetchRequest.predicate = predicate // 重要提醒:NSFetchedResultsController必须设置排序描述符才能正常工作 let sortDescriptor = NSSortDescriptor(key: "yourSortKey", ascending: true) // 替换成你实体里的实际排序字段 fetchRequest.sortDescriptors = [sortDescriptor] // 初始化控制器,记得替换成你自己的ManagedContext let controller = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: yourManagedContext, sectionNameKeyPath: nil, cacheName: nil) return controller }()
几个关键注意事项
- 确保你的
DocumentTypeList实体中确实存在subuserID属性,且类型为字符串,和你的变量类型完全匹配 - 如果
subuserID可能为空,建议先做非空校验,避免谓词出错:guard !subuserID.isEmpty else { // 处理空值情况,比如返回所有dltPresent为true的结果 let fallbackPredicate = NSPredicate(format: "dltPresent == %@", NSNumber(value: true)) fetchRequest.predicate = fallbackPredicate // 后续排序、控制器初始化逻辑不变 } - 谓词的格式字符串里,字符串类型的变量用
%@占位符,数字类型用%d或%f,Core Data会自动帮你做类型适配
内容的提问来源于stack exchange,提问作者Ankit Badani
相关产品推荐
相关产品推荐

