0

状況: アプリのドキュメント ディレクトリ (iOS) からファイルのリストを UITableView に表示しようとしています。

問題: ビューが読み込まれると、すべてのファイルを一覧表示するのではなく、1 つのファイル (アルファベット順で最初のファイル) のみが一覧表示されます。

コード:

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.textwhile

UITableView にすべてのファイル名と最初のファイル名だけを表示させる方法についてのアイデアはありますか?

4

1 に答える 1

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
于 2012-05-21T22:33:41.823 に答える