如何让SectionedFetchRequest返回正确的分组数据?
问题分析与解决
你的问题出在分组标识(sectionIdentifier)与标题逻辑的对应关系不匹配,导致分组标题和实际显示的数据完全相反。
核心原因
你通过\.isExpense作为分组标识,意味着:
sections.id = true的分组,内部所有MyTransaction的isExpense属性都是truesections.id = false的分组,内部所有数据的isExpense属性都是false
但你设置标题时的逻辑,和isExpense的实际含义搞反了——要么是你对isExpense的定义(比如true代表收入而非支出),要么是标题判断写反了。
解决方案
根据你的实际业务逻辑二选一:
方案1:修正标题判断逻辑
如果MyTransaction中isExpense = true代表收入,false代表支出,直接修改标题判断:
let title = sections.id ? "Income" : "Expenses"
方案2:修正分组标识的逻辑
如果MyTransaction中isExpense = true确实代表支出,但你希望分组逻辑取反,修改sectionIdentifier为取反后的结果:
@SectionedFetchRequest<Bool, MyTransaction> ( sectionIdentifier: { !$0.isExpense }, // 取反isExpense作为分组标识 sortDescriptors: [SortDescriptor(\.date, order: .forward)] ) private var transactions: SectionedFetchResults<Bool, MyTransaction>
同时保持原标题判断逻辑即可。
额外检查
- 确认数据存储时
isExpense的值是否正确:比如支出数据的isExpense是否设为true,收入设为false - 变量名
tansactions存在拼写错误,建议修正为transactions(不影响功能,但提升代码可读性)
内容的提问来源于stack exchange,提问作者Prashant Cholachagudda
相关产品推荐
相关产品推荐

