gpt4 book ai didi

ios - 核心数据目录(树)结构

转载 作者:可可西里 更新时间:2023-11-01 04:35:06 26 4
gpt4 key购买 nike

关于核心数据树结构的主题很多,但我还有一些问题。

我要创建的是一个简单的目录结构。 (带有子文件夹的文件夹带有子文件夹,......以及后来的文件。)

我现在有这个文件夹实体: enter image description here

我正在添加这样的文件夹:[显然这是虚拟数据,稍后将动态插入]

// root 1
Folder *root1 = [NSEntityDescription insertNewObjectForEntityForName:@"Folder" inManagedObjectContext:context];
root1.name = @"Root 1";
root1.parent = nil;

// folder 1 in root 1
Folder *subFolder1 = [NSEntityDescription insertNewObjectForEntityForName:@"Folder" inManagedObjectContext:context];
subFolder1.name = @"Folder 1 in root 1";
subFolder1.parent = root1;

root1.children = [NSSet setWithObjects: subFolder1, nil];

现在我想为每个文件夹创建一个 ViewController,然后为每个子文件夹打开一个新的 ViewController。 (或者一个无限的 UITabelView)

当我使用此代码在 Folder 实体中循环时:

NSArray *folders = [context executeFetchRequest:fetchRequest error:&error];
for(Folder *folder in folders){
NSLog(@"Profile: %@", folder.name);
}

我一次得到所有文件夹。

所以问题是:如何在树结构中将其记录下来?所以我可以先为所有根文件夹创建一个 ViewController,然后为每个子文件夹创建另一个 ViewController 等等......(换句话说:我如何读取这个实体,就像我将它放在 UITabelView 中一样)

最佳答案

您没有详细说明您的提取请求是如何构建的,但关键是使用 NSPredicate 来过滤结果,仅包含感兴趣的 Folder 对象任何给定时间。为此,您需要在 View Controller 中存储对当前父文件夹的引用:

@property (readwrite, strong) Folder *parentFolder;

如果您在树的根部,这将为 nil,否则它将引用您正在显示其内容的当前文件夹。

然后在谓词中使用这个属性:

NSFetchRequest *fetchRequest = ...
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"parent = %@", self.parentFolder];
[fetchRequest setPredicate:predicate];

当您位于根目录时,这将仅选择 Folder 的实例,其中 parentnil(即仅根级别对象) .在所有其他级别,它仅选择 Folders,其中 parent 是当前父文件夹的任何内容。

作为旁注,在您的示例代码中,没有必要设置 subFolder1.parent root1.children。 Core Data 反向关系管理意味着您只需要在关系的一侧执行此操作。两者都做并没有什么坏处(除了非常小的性能影响),但它也没有任何意义。

关于ios - 核心数据目录(树)结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21667240/

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