2011-07-19 6 views
2

Bonjour J'utilise api dropbox et l'affichage des méta-données de compte dropbox ..Comment reconnaître un fichier ou un dossier de dropbox APi

Je veux différencier les fichiers et les dossiers de data..because chargés que je veux montrer le niveau suivant s'il y a dossier et s'il y a le fichier que je ne veux pas montrer suivante Voir

mon code pour charger des données

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

    [self.metaArray release]; 
    self.metaArray = [[NSMutableArray alloc]init ]; 

    for (DBMetadata *child in metadata.contents) { 

     NSString *folderName = [[child.path pathComponents] lastObject]; 
     [self.metaArray addObject:folderName]; 



    } 



    [self.tableView reloadData]; 
    [self.activityIndicator stopAnimating]; 


} 

Like this

Répondre

4

Ac Le méta-donnée contient une propriété appelée is_dir qui devrait vous permettre de déterminer si l'élément particulier est un répertoire ou non.

En regardant l'en-tête de DBMetaData il est en effet exposé comme propriété

@property (nonatomic, readonly) BOOL isDirectory; 

Ainsi, vous pouvez simplement faire un test simple comme si

- (void)restClient:(DBRestClient*)client loadedMetadata:(DBMetadata*)metadata 
{ 
    if (metadata.isDirectory) { 
     // handle directory here 
    } else { 
     // handle file here 
    } 
} 

En ce qui concerne pousser des vues sur la base ou non une entrée est un répertoire, vous pouvez sous-classer UITableViewCell et ajouter une propriété isDirectory. Au lieu d'ajouter juste le nom à self.metaArray vous pouvez ajouter un dictionnaire contenant à la fois le nom et la valeur de isDirectory. Ensuite, dans votre source de données de vue de table où vous remplissez les cellules, vous définissez la propriété isDirectory du UITableViewCell en fonction de la même propriété dans le dictionnaire approprié du tableau. Enfin, dans la vue de la table méthode déléguée

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

vous pouvez obtenir la cellule sélectionnée en utilisant la indexPath puis tester la propriété isDirectory et en fonction de sa valeur prendre les mesures appropriées.

Espérons que cela aide.

+0

Ok ... Merci beaucoup de réponse – iProgrammer

+1

Vous devez soit tester avant d'entrer dans la boucle 'for' pour le niveau haut répertoires, ou utilisez 'child.isDirectory' dans le' for' au lieu de 'metadata.isDirectory' –

+0

Yaa J'utilisais un mauvais code ... Il fonctionne maintenant .. – iProgrammer

3

Utilisation de la V2 API de Dropbox avec le SDK Dropbox est:

DropboxClient *client = [DropboxClientsManager authorizedClient]; 
[[client.filesRoutes listFolder:path] 
response:^(DBFILESListFolderResult *result, DBFILESListFolderError *routeError, DBRequestError *error) { 
    if (result) { 

     for (DBFILESMetadata *entry in result.entries) { 
      if ([entry isKindOfClass:[DBFILESFileMetadata class]]) { 
       DBFILESFileMetadata *fileMetadata = (DBFILESFileMetadata *)entry; 
       NSLog(@"File: %@", fileMetadata.name); 
      } else if ([entry isKindOfClass:[DBFILESFolderMetadata class]]) { 
       DBFILESFolderMetadata *folderMetadata = (DBFILESFolderMetadata *)entry; 
       NSLog(@"Folder: %@", folderMetadata.name); 
      } 
     } 
    } 
Questions connexes