有没有办法在 FetchRequest 和 SectionedFetchRequest 之间动态切换?

Is there a way to dynamically switch between FetchRequest and SectionedFetchRequest?

过去几天我一直在研究 CoreData,试图构建一个应用程序来查看购物花费。现在它仍然非常简单,每个商店只有一个数据模型。 我有一个显示所有这些的列表视图,并且我已经将排序集成到列表中,首先是通过围绕谓词的旧变通方法,但是我发现了今年 wwdc 的 this 视频,我基本上只是复制了。我真的对 SectionedFetchRequest 的分组功能着迷,我想集成它,同时保持原始的非分段列表。所以我想我会跳过我的列表中的 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 之间动态切换

根据 documentation 你不能不分节 a SectionedFetchRequest,因此你必须同时支持两者。因此,我会创建两个单独的子视图,并在父视图中显示它们,该父视图具有控制显示哪个子视图的逻辑。如果您支持 pre-iOS 15 OS's.

,您无论如何都需要这样做
MainView{
    if sectioned
        ListViewSectioned(sortDescriptors: descriptor, sectionID: sectionID)
    } else {
        ListView(sortDescriptors: descriptor)
    }
}

ListView{
    FetchRequest(sortDescriptors: descriptor)
}

ListViewSectioned{
    SectionedFetchRequest(sectionIdentifier: sectionID, sortDescriptors: descriptor)
}

主视图不必再知道选择和设置不同的列表视图。我没有登记 OS,但你也需要它。