2012-11-10 181 views
2

即時消息添加「移動到文件夾」功能到我的應用與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也有顯示的應用程序的文件目錄下的所有文件夾,我用一個自定義NSObject稱爲文件夾項目,它存儲表格的所有項目路徑,名稱和縮進級別。如果我使用這種方法,我不能得到路徑,因爲在Dropbox幫助器類中的所有文件夾,我可以將它移動到viewcontroller,但令我困惑的是獲取objectAtIndex。如果我只是添加對象,它會顯示所有的第一級文件夾,然後第二,然後第三。我想要它,所以如果在保管箱中有一個名爲「測試1」的文件夾,然後測試1包含「測試2」,那麼它會顯示測試1,然後再縮進測試2文件夾,然後是其他第一個目錄文件夾。如果我在數組中使用我的FolderItem,我找不到objectAtIndex。我怎樣才能得到我需要插入的文件夾索引呢?

+0

僅供參考 - Dropbox頁面https://www.dropbox.com/developers/reference/bestpractice指出您不應該得到用戶的Dropbox文件的遞歸列表。 – rmaddy

+0

我使用的應用程序執行此操作,並且用戶必須通過所有文件夾才能最終找到正確的文件夾,這會很煩人。他們可能只是說不要試圖在整個Dropbox中獲取每一個文件,即時獲取文件夾,所以如果他們有一個名爲「書籍」的文件夾,然後是一個名爲「PDFS」的子目錄,他們不必通過2個文件夾,而是在其上1頁。更輕鬆。 – Maximilian

+0

考慮你正在爲每一個目錄進行網絡調用。什麼是用戶有幾十個目錄?爲什麼讓用戶在每次網絡通話時等待?考慮到在OS X中,當您保存文件時,用戶必須手動遍歷目錄結構。節省時間和帶寬,並考慮讓用戶根據需要進行導航,而不是預加載所有內容。 – rmaddy

回答

2

您遇到的問題是您正在構建一個簡單的文件名列表。你需要建立一個樹結構。一種方法是創建一個字典數組。數組中的每個元素都是一個字典。該字典包含文件名和其子目錄的數組。

隨着restClient:loadedMetadata:方法的調用,您需要查看元數據以確定父目錄。使用它在樹結構中找到正確的點,以便可以在樹中的適當節點處填入子目錄數組。

+0

謝謝,我試圖去每個文件,並獲得上面的目錄。加載元數據時獲取目錄更有意義,所以我不需要每個文件。 – Maximilian

相關問題