【发布时间】:2014-02-10 00:38:17
【问题描述】:
关于核心数据树结构的主题很多,但我还有一些问题。
我要创建的是一个简单的目录结构。 (带有子文件夹的文件夹,带有子文件夹的文件夹,......以及后来的文件。)
我现在有这个文件夹实体:
我正在添加这样的文件夹:[显然这是虚拟数据,稍后将动态插入]
// 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)
当我使用此代码在文件夹实体中循环时:
NSArray *folders = [context executeFetchRequest:fetchRequest error:&error];
for(Folder *folder in folders){
NSLog(@"Profile: %@", folder.name);
}
我一次得到所有文件夹。
所以问题是:如何在树形结构中将其记录下来?所以我可以先为所有根文件夹创建一个 ViewController,然后为每个子文件夹创建另一个 ViewController 等等...... (换句话说:我如何读取这个实体,就像我将它放在 UITabelView 中一样)
【问题讨论】:
-
使用获取结果控制器,省去很多麻烦。在您的 viewController 中为父文件夹创建一个 ivar,将第一个 viewController(顶级)设置为 nil。当您在 tableView 中选择一个文件夹时,创建 viewController 的另一个实例并将其 ivar 设置为所选项目(父项)并将其推送到堆栈上。使用下面 Tom 描述的谓词。使用像你这样的数组意味着编辑不会自动反映在你的 UITableViews 中。观看视频,了解具有相同文件夹/文档结构且使用 Core Data 的应用程序。
-
支持拖放等。您不会在网站上找到有关如何实现文件夹和文档层次结构的任何详细信息,但如果有任何兴趣,我可以添加一些详细信息。 ossh.com.au/design-and-technology/software-development/…
-
真的很有帮助,谢谢!
标签: ios objective-c core-data treeview