0

情况:我正在尝试在 UITableView 中显示我的应用程序文档目录 (iOS) 中的文件列表。

问题:当视图加载时,而不是列出所有文件,它只列出一个文件(第一个按字母顺序排列)

代码

cell.textLabel.text = [NSString  stringWithFormat:@"Cell Row #%d", [indexPath row]];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSPredicate *filter = [NSPredicate predicateWithFormat:@"self ENDSWITH '.txt'"];
NSArray *fileListAct = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:documentsDirectory error:nil];
NSArray *FileList = [fileListAct filteredArrayUsingPredicate:filter];
cell.textLabel.text = [NSString stringWithFormat:@"%@",[FileList objectAtIndex:indexPath.row]];
NSLog(@"File List: %@", FileList);

所有代码都按其应有的方式执行,甚至最后的 NSLog 行也列出了所有文件名,但由于某种原因,在 UiTableView 中它只列出了第一个文件名。

更多信息:我尝试do为最后cell.textlabel.text一行创建一个循环,但这也需要一个while语句(我想不出条件是什么)。

关于如何使 UITableView 显示所有文件名而不是第一个文件名的任何想法?

4

1 回答 1

2

您需要为 fileList 设置一个全局 NSArray。您需要在其中一个viewDidLoadviewWillAppear:

例子

这是一个粗略的例子,我会怎么做,虽然它还没有经过测试,但它应该可以工作。

@interface MyViewController () {
    NSMutableArray *FileList;
}
@end

@implementation MyViewController

- (void)viewDidLoad:(BOOL)animated
{ 
    [super viewDidLoad];

    FileList = [[NSMutableArray alloc] init];
}

/*  Setup the array here  */
- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSPredicate *filter = [NSPredicate predicateWithFormat:@"self ENDSWITH '.txt'"];
    NSArray *fileListAct = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:documentsDirectory error:nil];

    FileList = [fileListAct filteredArrayUsingPredicate:filter];
}

/* Set the number of cells based on the number of entries in your array  */
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return [FileList count];
    /*  this is probably what you are missing and is definitely 
        the reason you are only seeing 1 cell.  */
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{
    cell.textLabel.text = [NSString stringWithFormat:@"%@",[FileList objectAtIndex:indexPath.row]];
}

@end
于 2012-05-21T22:33:41.823 回答