2009-11-16 6 views
1

J'essaye de lister le contenu du répertoire de Sonneries dans un TableauView, cependant, j'obtiens seulement le dernier dossier dans le répertoire dans toutes les cellules, au lieu du fichier par cellule. Ceci est mon code:Liste le contenu du répertoire dans un UITableView

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    Profile_ManagerAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate]; 

    static NSString *CellIdentifier = @"Cell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease]; 
     cell.hidesAccessoryWhenEditing = YES; 
    } 

    cell.accessoryType = UITableViewCellAccessoryNone; 
    //cell.textLabel.text = @"No Ringtones"; 
    //cell.textLabel.text = @"Test"; 

    NSString *theFiles; 
    NSFileManager *manager = [NSFileManager defaultManager]; 
    NSArray *fileList = [manager directoryContentsAtPath:@"/Test"]; 
    for (NSString *s in fileList){ 
     theFiles = s; 
    } 
    cell.textLabel.text = theFiles; 

    return cell; 
} 

Il charge bien, aucune erreur, quand je l'utilise NSLog il répertorie tous les fichiers dans le répertoire très bien. J'ai même essayé [s objectAtIndex:indexPath.row] mais j'obtiens objectAtIndex: erreur. Quelqu'un a des idées?

+0

peut-être vous devriez créer les tableaux dans l'en-tête afin que vous puissiez accéder au fichier n'importe où dans le fichier principal. Si vous ne le faites pas, alors comment pouvez-vous définir le nombre d'éléments de table, sauf si vous avez déjà pré-défini le nombre, mais si vous avez des gens ajouter des fichiers ou supprimer, il serait plus facile d'obtenir le nombre d'éléments dans le répertoire. – Maximilian

Répondre

0

Votre boucle for fait simplement une itération sur les fichiers et définit les fichiers sur le chemin actuel. Donc à la fin de la boucle, theFiles sera juste la dernière chaîne de la collection.

Essayez quelque chose comme:

cell.textLabel.text = [fileList objectAtIndex:indexPath.row]; 
+0

Vous êtes semi-correct sur cette réponse, ce qui était réellement incorrect était le NSMutableArray qui autorisait objectAtIndex. – WrightsCS

+0

objectAtIndex est fourni sur NSArray, mais n'est-ce pas? –

1

J'adore en fait poser des questions sur ici, la cause en moins de 10 minutes, je réponds à ma propre question!

Voilà comment je suis arrivé le code ci-dessus pour travailler:

NSMutableArray *theFiles; 
NSFileManager *manager = [NSFileManager defaultManager]; 
NSArray *fileList = [manager directoryContentsAtPath:@"/Test"]; 
for (NSString *s in fileList){ 
    theFiles = fileList; 
} 
cell.textLabel.text = [theFiles objectAtIndex:indexPath.row]; 
return cell; 

Je viens de faire la NSString un NSMutableArray, et qui m'a permis d'utiliser la objectAtIndex. Maintenant, pour couper l'extension de fichier!

+0

Vous réalisez que vous copiez le tableau plusieurs fois ici, ce qui est très inefficace. Vous n'avez pas besoin de la boucle for, et je doute que vous ayez besoin de créer une copie mutable du tableau. –

1

Vous devez supprimer NSString, NSMutableArray et boucle .. le code final devrait ressembler à ceci:

NSFileManager *manager = [NSFileManager defaultManager]; 
NSArray *fileList = [manager directoryContentsAtPath:@"/Test"]; 
cell.textLabel.text = [fileList objectAtIndex:indexPath.row]; 
return cell; 

BTW, ce fileList et directeur créé à plusieurs reprises pour chaque cellule .. Il est donc préférable de le faire Une variable globale pour UITableViewController et assigner seulement 1

Questions connexes