gpt4 book ai didi

ios - CoreData 中的递归获取

转载 作者:行者123 更新时间:2023-11-29 05:16:42 26 4
gpt4 key购买 nike

我的数据结构简化为:

Data Structure

因此,一个文件夹可以包含多个文件夹或片段,并且每个片段都是文件夹的一部分。我想获取给定文件夹中或特定文件夹子文件夹中的所有片段。

第一个案例适合我,但我在正确处理第二个案例时遇到问题。

为了更清楚地说明这一点,这里有一个示例:

Example

当我选择文件夹 C 时,我想要获取代码段 3,但是当我选择文件夹 B 或文件夹 A 时,我想要获取代码段 1、代码段 2 和代码段 3。

这是我目前拥有的:

class Store {
...
func snippetsFetchRequest() -> NSFetchRequest<Snippet> {
let fetch: NSFetchRequest<Snippet> = Snippet.fetchRequest()
fetch.returnsObjectsAsFaults = false
fetch.relationshipKeyPathsForPrefetching = ["folder", "tags"]
fetch.sortDescriptors = [NSSortDescriptor(key: "updateDate", ascending: false)]
return fetch
}
...
}


let context = PersistenceManager.shared.mainContext
let store = SnippetStore(context: context)
fetchedResultsController = NSFetchedResultsController(fetchRequest: store.snippetsFetchRequest(),
managedObjectContext: context,
sectionNameKeyPath: nil,
cacheName: nil)
fetchedResultsController.fetchRequest.predicate = NSPredicate(format: "folder == %@", selectedFolder)
do {
try fetchedResultsController.performFetch()
} catch {
...
}

但这只会获取给定/选定文件夹的直接子级片段。

有什么办法可以通过仍然使用NSFetchedResultsController来解决我的问题吗?

最佳答案

你的数据结构是错误的。人们倾向于认为数据结构对于给定的信息具有“正确”的形式;你想要尽可能接近地“模拟”现实。这是错误的。您的模型仅在为您的特定应用程序提供值(value)的范围内才有值(value)。

在这种情况下,如果您想获取文件夹的所有后代,最好建立一个关系来表示它。您可以建立后代和祖先的多对多关系,您可以在添加对象时设置该关系。如果您需要更多属性进行过滤或排序,您应该添加它们,即使这些属性理论上可以从当前树模型派生。只要确保它们保持同步即可。

关于ios - CoreData 中的递归获取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59115658/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com