Dropbox中所有文件夹和文件夹的列表

时间:2012-11-10 02:39:39

标签: objective-c cocoa nsarray dropbox

我在我的应用中添加了“移动到文件夹”功能,并支持Dropbox。我试图获取整个用户Dropbox中的所有文件夹和子文件夹。下面是我现在拥有的代码,如果记录,则具有正确的顺序但是向后

-(void)restClient:(DBRestClient *)client loadedMetadata:(DBMetadata *)metadata {

    if (allFolders == nil) {
        allFolders = [[NSMutableArray alloc] init];
        [allFolders addObject:@"/"];
    }

    for (DBMetadata *fileMetadata in metadata.contents) {

        if ([fileMetadata isDirectory]) {
            NSArray *filePathComponents = [fileMetadata.path pathComponents];
            NSString *inFolder = [filePathComponents objectAtIndex:[filePathComponents count]-2];
            NSLog(@"file is in folder %@",inFolder);
            [allFolders insertObject:fileMetadata.filename atIndex:[allFolders indexOfObject:inFolder]];
            if ([metadata.contents count] > 0) [[self restClient] loadMetadata:fileMetadata.path];

        }

    }

}

这个问题是我的hViewFoldersViewController还必须显示应用程序的文档目录的所有文件夹,并且我使用名为Folder Item的自定义NSObject来存储所有项目路径,名称和表的缩进级别。如果我使用这种方法,我无法获得路径,因为al lFolders在dropbox助手类中,我可以将其移动到viewcontroller,但令我困惑的是获得objectAtIndex。如果我让它只是添加对象,它将显示所有第一级文件夹,然后是第二级,然后是第三级。我想要它,所以如果在Dropbox中你有一个名为“test 1”的文件夹,然后test 1包含“test 2”,那么它显示测试1,然后更多缩进test 2文件夹,然后是其他第一个目录文件夹。如果我在数组中使用我的FolderItem,我找不到objectAtIndex。如何获取我需要插入的文件夹的索引呢?

1 个答案:

答案 0 :(得分:2)

您遇到的问题是您正在构建一个简单的文件名列表。您需要构建树结构。一种方法是创建一个字典数组。数组中的每个元素都是字典。该字典包含文件名及其子目录的数组。

在调用restClient:loadedMetadata:方法时,您需要查看元数据以确定父目录。使用此选项可在树结构中找到正确的位置,以便可以在树中的适当节点处填充子目录数组。