在 UITableView 中显示文件的 NSArray - iOS 5
Posted
技术标签:
【中文标题】在 UITableView 中显示文件的 NSArray - iOS 5【英文标题】:Displaying NSArray of files in a UITableView - iOS 5 【发布时间】:2012-04-23 21:58:18 【问题描述】:我有一个允许用户保存和打开文本文件的应用程序。保存和打开文件相当简单明了,但我必须为用户提供一种简单的方法来选择要打开的文件。我决定用 UITableView 来做到这一点。
当 TableView 在我的视图控制器中加载时,我的目标是使用 Documents 文件夹(ios 应用沙箱的一部分)中的所有用户文本文件的名称填充 TableView。
我对如何做到这一点有一个大致的了解:
获取 Documents 文件夹的内容并将其放入数组中
NSString *pathString = [[NSBundle mainBundle] pathForResource:@"Documents" ofType:@"txt"];
NSArray *fileList = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:pathString error:nil];
NSLog(@"Contents of directory: %@", fileList);
但这总是在输出窗口中返回:(null)
。 我的应用的文档文件夹的路径是什么?
将数组放在 UITableView 中
我想我会使用numberOfRowsInSection
方法来执行此操作。 这是执行此类操作的正确位置吗?我应该使用其他方法吗?
最后,应用程序将获取所选单元格的值并使用该值打开文件。
我的主要问题是:如何将项目(尤其是目录的内容)放入 NSArray,然后在 UITableView 中显示该数组?
非常感谢任何帮助!
【问题讨论】:
[[NSBundle mainBundle] pathForResource:@"Documents" ofType:@"txt"];
实际上会在您的应用程序包中为您提供 single 资源“Documents.txt”。查看文档。
另外,您可能应该改用- (NSArray *)pathsForResourcesOfType:(NSString *)extension inDirectory:(NSString *)subpath
。否则你基本上得到了它
【参考方案1】:
您可以使用以下方式获取路径:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
您可以使用以下方式获取目录的内容:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSArray *fileList = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:documentsDirectory error:nil];
关于在 UITableView 中显示 NSArray,您应该查看 Apple 关于 UITableView 数据源协议的文档:
http://developer.apple.com/library/ios/#documentation/uikit/reference/UITableViewDataSource_Protocol/Reference/Reference.html
您使用 cellForRowAtIndexPath 方法来实际填充表格,这样可以工作:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MyIdentifier"];
if (cell == nil)
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"MyIdentifier"] autorelease];
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
cell.textLabel.text = [fileList objectAtIndex:indexPath.row]
return cell;
【讨论】:
谢谢!但是,我怎样才能得到目录的内容,而不是目录的路径?这可能吗? 我将此添加到我的原始答案中以上是关于在 UITableView 中显示文件的 NSArray - iOS 5的主要内容,如果未能解决你的问题,请参考以下文章
在 UITableView 中显示文件的 NSArray - iOS 5
如何在 UITableView 中显示带有视频图像的视频文件?
如何在 NSDictionary 中访问本地 JSON 文件响应以在 UITableView 中显示?
将 Bundle 中的文件显示到 UITableView - iOS