有没有办法在 FetchRequest 和 SectionedFetchRequest 之间动态切换?
Posted
技术标签:
【中文标题】有没有办法在 FetchRequest 和 SectionedFetchRequest 之间动态切换?【英文标题】:Is there a way to dynamically switch between FetchRequest and SectionedFetchRequest? 【发布时间】:2021-11-02 19:05:11 【问题描述】:在过去的几天里,我一直在玩 CoreData,试图构建一个应用程序来审查在购物上花费的钱。现在它仍然非常简单,只有一个数据模型用于各个商店。 我有一个显示所有这些的列表视图,并且我已经将排序集成到列表中,首先是通过围绕谓词的较旧的解决方法,但是我发现了今年 wwdc 的 this 视频,我基本上只是复制了。我对 SectionedFetchRequest 的分组功能非常着迷,我想整合它,同时保持原始的非分段列表。所以我想我会跳过 List 中的 FetchRequest 并将结果传递给列表视图而不是 SortDescriptor
MainView
ListView(descriptor: SortDescriptor)
ListView
FetchRequest(sortDescriptors: descriptor)
改为:
MainView
ListView(FetchRequest(sortDescriptors: descriptor))
ListView
FetchedResults
但这仍然让我无法按一个按钮来打开或关闭切片。 我有点不知道如何从这里继续。我想到的第一个想法是围绕 ListView 处理创建一个包装器,FetchRequest 根据按钮切换状态将其发送到 ListView
MainView
Wrapper(sortDescriptors, toggleState)
Wrapper
ListView(FetchRequest(sortDescriptors: descriptor))
ListView
FetchedResults
但我仍然会遇到问题,即我的 ListView 中需要 2 个变量,一个用于普通变量,一个用于 sectionedFetchResults。 有谁知道如何处理这个问题?
TLDR 我想在 FetchRequest 和 SectionedFetchRequest 之间动态切换
【问题讨论】:
【参考方案1】:根据documentation,您不能不分割SectionedFetchRequest
,因此您必须同时支持两者。因此,我会制作两个单独的子视图,并在父视图中显示它们,该父视图具有控制显示哪一个的逻辑。如果您支持 ios 15 之前的操作系统,则无论如何都需要这样做。
MainView
if sectioned
ListViewSectioned(sortDescriptors: descriptor, sectionID: sectionID)
else
ListView(sortDescriptors: descriptor)
ListView
FetchRequest(sortDescriptors: descriptor)
ListViewSectioned
SectionedFetchRequest(sectionIdentifier: sectionID, sortDescriptors: descriptor)
主视图不必再知道选择和设置不同的列表视图。我没有签入操作系统,但你也需要它。
【讨论】:
很简单,谢谢你解开这个结以上是关于有没有办法在 FetchRequest 和 SectionedFetchRequest 之间动态切换?的主要内容,如果未能解决你的问题,请参考以下文章
使用 CloudKit + CoreData,如何在没有 SwiftUI 的 @FetchRequest 的情况下从远程云更新中更新 UI?
SwiftUI Preview 不适用于 FetchRequest 和 Init
带有 NSPredicate 的 Fetchrequest 不返回正确的值
SwiftUI - 如何在 init 中使用 fetchRequest 更新数据