表视图中的完整FIle列表

时间:2012-05-21 22:23:28

标签: objective-c ios uitableview

情况: 我试图在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显示所有文件名而不是第一个文件名的任何想法?

1 个答案:

答案 0 :(得分: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