情况: 我试图在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显示所有文件名而不是第一个文件名的任何想法?
答案 0 :(得分:2)
您需要为fileList设置全局NSArray。您需要在viewDidLoad
或viewWillAppear:
这是一个粗略的例子,我将如何做,尽管它还没有经过测试,但它应该有效。
@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