2011-07-04 4 views
0

내비게이션 컨트롤의 테이블보기에있는 디렉토리에 파일을 나열하고 싶습니다. 디렉터리에 파일을 표시합니다. 하지만 아래로 스크롤 할 때마다 시뮬레이터가 충돌합니다. 문제가 무엇입니까? dirArray는 .h 파일에서 NSArray * dirArray로 정의됩니다.contentsOfDirectoryAtPath가 충돌 함

- (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; 
} 
+0

이 충돌 로그를 제공 할. – Ishu

답변

2

귀하의 문제는

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

는 오토 릴리즈 객체에 dirArray 포인팅을 것입니다. 따라서 나중에 액세스 할 때 할당이 해제됩니다. 그것을 유지하십시오.

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

또는 더 나은, 속성으로 선언하고

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

고맙습니다. 그것은 작동합니다. – user698200

0

당신은 배열의 속성을 확인하고 @synthesize한다.

또는

당신은 ALLOC 배열을 놈이야와의 dealloc에서 그것을 relese.

+0

\t을 추가했습니다. dirArray = [[NSArray alloc] init]; contentsOfDirectoryAtPath를 호출하기 전에 dealloc에서 그것을 릴리스했습니다. 여전히 충돌합니다. 내부에서만 사용 되더라도 재산을 소유하고 합성해야합니까? – user698200

+0

크래시 로그 란 무엇입니까? –

+0

2011-07-04 16 : 06 : 33.032 NaviTest [1211 : 207] - [NSCFString objectAtIndex :] : 인식 할 수없는 선택자가 인스턴스에 전송 됨 0x4e1d090 2011-07-04 16 : 06 : 33.035 NaviTest [1211 : 207] *** 'NSCFString objectAtIndex :] : 인식 할 수없는 셀렉터를 인스턴스 0x4e1d090에 전송' 'NSException'인스턴스를 throw 한 후 호출 종료 프로그램 수신 신호 : "SIGABRT". (gdb) – user698200