2

ドロップボックスをサポートするアプリに「フォルダに移動」機能を追加しています。ユーザーのドロップボックス全体ですべてのフォルダーとサブフォルダーを取得しようとしています。私が今持っているコードは、ログに記録されている場合は正しい順序ですが、逆になっています

-(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カスタムを使用します。NSObjectこのメソッドを使用すると、ドロップボックス ヘルパー クラス内のすべての lFolders を に移動できるため、パスを取得できませんが、viewcontroller混乱しているのはobjectAtIndex. オブジェクトを追加するだけにすると、すべての第 1 レベルのフォルダーが表示され、次に第 2、第 3 レベルのフォルダーが表示されます。ドロップボックスに「テスト1」というフォルダーがあり、テスト1に「テスト2」が含まれている場合、テスト1が表示され、テスト2フォルダーがさらにインデントされ、次に他の最初のディレクトリフォルダーが表示されます。配列でFolderItemを使用すると、objectAtIndex. 挿入する必要があるフォルダのインデックスを取得するにはどうすればよいですか?

4

1 に答える 1

2

あなたが抱えている問題は、ファイル名の単純なリストを作成していることです。ツリー構造を構築する必要があります。1 つの方法は、辞書の配列を作成することです。配列の各要素はディクショナリです。ディクショナリには、ファイル名とそのサブディレクトリの配列が含まれています。

メソッドが呼び出されると、restClient:loadedMetadata:メタデータを調べて親ディレクトリを特定する必要があります。これを使用して、ツリー構造内の正しい場所を見つけ、ツリー内の適切なノードでサブディレクトリ配列を埋めることができます。

于 2012-11-10T03:01:40.587 に答える