1

TableViewにRingtonesディレクトリの内容を一覧表示しようとしていますが、セルごとのファイルではなく、すべてのセルのディレクトリの最後のファイルしか取得していません。これは私のコードです:

- (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:エラーが発生します。誰かアイデアはありますか?

4

3 に答える 3

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を使用できるようになりました。次に、ファイル拡張子をトリミングします。

于 2009-11-16T06:01:21.180 に答える
1

NSString、NSMutableArrayおよびforループを削除する必要があります。最終的なコードは次のようになります。

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

ところで、このfileListとmanagerは、セルごとに繰り返し作成されます。したがって、UITableViewControllerのグローバル変数にして、1つだけを割り当てることをお勧めします。

于 2011-10-09T08:39:21.977 に答える
0

forループは、ファイルを繰り返し処理し、ファイルを現在のパスに設定するだけです。したがって、ループの最後では、theFilesはコレクションの最後の文字列になります。

次のようなものを試してください:

cell.textLabel.text = [fileList objectAtIndex:indexPath.row];
于 2009-11-16T06:00:24.073 に答える