contentsOfDirectoryAtPath崩溃

时间:2011-07-04 06:33:19

标签: iphone

我想在导航控件的表视图中列出目录中的文件。 它显示目录中的文件。 但每当我向下滚动时,我的模拟器就会崩溃。问题是什么? dirArray在.h文件中定义为NSArray * dirArray。

- (void)viewDidLoad {
    [super viewDidLoad];

    NSString *path = [[NSFileManager defaultManager]currentDirectoryPath];
    NSFileManager *fileManager = [NSFileManager defaultManager];
    dirArray = [fileManager contentsOfDirectoryAtPath:path error:nil];      
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:   (NSInteger)section {
    return [dirArray count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"Cell";    
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault
    reuseIdentifier:CellIdentifier] autorelease];
    }
    NSString *fileName = [dirArray objectAtIndex:indexPath.row];
    cell.textLabel.text = fileName;

    return cell;
}

2 个答案:

答案 0 :(得分:2)

你的问题是那个

dirArray = [fileManager contentsOfDirectoryAtPath:path error:nil];

dirArray指向一个自动释放的对象。因此,当您稍后访问它时,它将被取消分配。保留它。

dirArray = [[fileManager contentsOfDirectoryAtPath:path error:nil] retain];

或者更好,将其声明为属性并执行

self.dirArray = [fileManager contentsOfDirectoryAtPath:path error:nil];

答案 1 :(得分:0)

你应该创建你的数组的属性并@synthesize它。

你将分配数组并将其释放到dealloc中。