1

ユーザーがテキストファイルを保存して開くことができるアプリがあります。ファイルの保存と開くのはかなり簡単で簡単ですが、開くファイルを選択する簡単な方法をユーザーに提供する必要があります。UITableViewを使用してこれを行うことにしました。

TableViewがViewControllerに読み込まれるとき、私の目標は、Documentsフォルダー(iOSアプリサンドボックスの一部)内からユーザーのすべてのテキストファイルの名前をTableViewに入力することです。

私はこれを行う方法の一般的な考えを持っています:

  1. Documentsフォルダーの内容を取得し、配列に配置します

    NSString *pathString = [[NSBundle mainBundle] pathForResource:@"Documents" ofType:@"txt"];
    NSArray *fileList = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:pathString error:nil];
    NSLog(@"Contents of directory: %@", fileList);
    

    ただし、これは常に次(null)の値を返します。出力ウィンドウで。アプリのドキュメントフォルダへのパスは何ですか?

  2. UITableViewに配列を配置します

    私はこれを行うためにnumberOfRowsInSectionメソッドを使用すると思いました。これは、このタイプの操作を実行するための適切な場所ですか?別の方法を使用する必要がありますか?

  3. 最後に、アプリは選択されたセルの値を取得し、その値を使用してファイルを開きます。


ここでの私の主な質問は、アイテム(特にディレクトリのコンテンツ)をNSArrayに配置し、その配列をUITableViewに表示するにはどうすればよいですか?

どんな助けでも大歓迎です!

4

1 に答える 1

3

次を使用してパスを取得できます。

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の表示については、UITableViewデータソースプロトコルに関するAppleのドキュメントを確認する必要があります。

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;
}
于 2012-04-23T22:17:56.940 に答える