2009-11-16 2 views
1

Я пытаюсь перечислить содержимое каталога Ringtones в TableView, однако я получаю только последний файл в каталоге во ВСЕХ ячейках вместо файла на ячейку. Это мой код:Список содержимого каталога в 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; 
} 

Он загружает нормально, никаких ошибок, когда я использую NSLog не перечисляет все файлы в каталоге просто отлично. Я даже пытался [s objectAtIndex:indexPath.row], но я получаю objectAtIndex: ошибка. У кого-нибудь есть идеи?

+0

Возможно, вам нужно создать массивы в заголовке, чтобы вы могли получить доступ к файлу в любом месте основного файла. если вы этого не сделаете, то как вы можете установить количество элементов таблицы, если вы уже предварительно задали номер, но если у вас есть люди, добавьте файлы или удалите их, будет проще получить количество элементов в каталоге. – Maximilian

ответ

0

Ваша петля for - это просто повторение файлов и настройка файлов на текущий путь. Итак, в конце цикла, файлы будут только последней строкой в ​​коллекции.

Попробуйте что-то вроде:

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

Вы полуправильны в этом ответе, что на самом деле было неправильным, это NSMutableArray, которому разрешен объектAtIndex. – WrightsCS

+0

objectAtIndex предоставляется на NSArray, хотя это не так? –

1

Я на самом деле люблю задавать вопросы здесь, дело менее чем за 10 минут, я ответил на мой собственный вопрос!

Это, как я получил приведенный выше код для работы:

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; 

Я только что сделал NSString NSMutableArray, и это позволило мне использовать objectAtIndex. Теперь, чтобы обрезать расширение файла!

+0

Вы понимаете, что здесь вы копируете массив несколько раз, что крайне неэффективно. Вам не нужен цикл for, и я сомневаюсь, что вам нужно создать изменчивую копию массива вообще. –

1

Вы должны удалить NSString, NSMutableArray и цикл .. окончательный код должен быть таким:

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

Кстати, этот FileList и менеджер создал несколько раз для каждой ячейки .. Так что лучше сделать это глобальная переменная для UITableViewController и назначить только 1

 Смежные вопросы

  • Нет связанных вопросов^_^