2014-02-19 1 views
0

은 시간을내어 저를 용서하십시오,하지만 난 많은 시간을 소비하고 내 마음에 있던 모든 노력을하고 난 인터넷에서 발견 :/NSTableView는 reloadData는 - 경계 예외 넘어 지수는

문제는 다시로드에 관한 것입니다 NSTableView 배열에 레코드를 하나 추가 한 후. 내 응용 프로그램은 NSDictionaries의 NSMuttableArray에 파일 이름을 검색하고 수정 한 날짜를 추가하는 것으로 시작합니다. 그런 다음이 정보를 NSTableView에로드하면 모든 것이 잘 동작합니다. 그러나 I'am 새로운 파일을 생성하고 NStableViev I'am이 점점 다시로드 할 때 :

[__NSArrayM objectAtIndex:]: index 5 beyond bounds [0 .. 4] 

지금 내가 I'am이 일을하려고 무엇의 일부 코드를 보여주고 싶어요. 그래서 여기

은 얼마나 내 테이블 점점 데이터

여기
-(NSInteger)numberOfRowsInTableView:(NSTableView *)tableView{ 
    NSLog(@"--------->%ld",(long)filesCount); 
    return filesCount; 
} 

-(NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn 
        row:(NSInteger)row { 
    NSDictionary *flag = FilesArray[row]; 
    NSString *identifier = [tableColumn identifier]; 

    if ([identifier isEqualToString:@"filename"]){ 
     NSTableCellView *cellview = [tableView makeViewWithIdentifier:@"filename" owner:self]; 
     [cellview.textField setStringValue:flag[@"name"]]; 
     return cellview; 

    }else if ([identifier isEqualToString:@"filedate"]){ 
     NSTableCellView *cellview = [tableView makeViewWithIdentifier:@"filedate" owner:self]; 
     [cellview.textField setStringValue:flag[@"date"]]; 
     return cellview; 
    } 
    return nil; 
} 

어떤 방법 새 파일을 만들 때 데이터를 다시로드하려고 i'am :

if([identifier isEqualToString:@"newFileModalDone"]){ 
     NSString *newFileName = [self fileNameModalDone]; 
//creating new file 
     [TxtFileObj WriteToFile:[newFileName stringByAppendingString:@".txt"] :nil]; 
//rescaning directory 
     [TxtFileObj GetFilesList]; 
     FilesArray = [TxtFileObj GetFileArray]; 
//updating files count 
     filesCount = [FilesArray count]; 

     [FilesListTable reloadData]; 

} 

나는 많은 디버거를 볼려고 시간과 그것은 예외처럼 보인다.

NSDictionary *flag = FilesArray[row]; 

그래서 나는 잘못된 배열 크기에 대해 생각하고 있었다. 새로운 영화를 만들지 만 여러 번 확인했는데 모든 것이 잘되었습니다.

내가 뭘 잘못했는지 찾아내는 데 도움이된다면, 미안, 문제가 분명하다면 나는 목표 C와 코코아에 대해 매우 익숙하다.

도움 주셔서 감사합니다.

+1

코드를 이해할 수 없습니다. '[TxtFileObj GetFilesList];'클래스 메소드입니까? 그것은 전혀 옳지 않습니다. – trojanfoe

+0

실제 코드도 게시하십시오. 'return cell view;는 컴파일되지 않습니다. – trojanfoe

+0

@trojanfoe 내 문제를보기 위해,'[TxtFileObj GetFilesList];'는 인스턴스 메소드입니다. 이것은 실제 코드이며 컴파일이 잘되어 있습니다. – MartyMcFly

답변

0
나는 마침내 내 실수 :) 경우

확실하지 않음을 발견 그래서 일부 포럼을 읽은 후

올바른하지만 지금은 그 작업을 잘, 지금 코드는 다음과 같습니다

if([identifier isEqualToString:@"newFileModalDone"]){ 
     NSString *newFileName = [self fileNameModalDone]; 
     [FilesListTable beginUpdates]; 
     [TxtFileObj writeToFile:[newFileName stringByAppendingString:@".txt"] :nil]; 
     [TxtFileObj getFilesList]; 
     FilesArray = [TxtFileObj filesListArray]; 
     [FilesListTable insertRowsAtIndexes:[NSIndexSet indexSetWithIndex:[FilesArray count]-1] 
           withAnimation:NSTableViewAnimationSlideDown]; 

     [FilesListTable endUpdates]; 
     [FilesListTable reloadData]; 
    } 

내가 기본적으로 추가됩니다 무슨 짓을했는지 3 가지 방법 :

[FilesListTable beginUpdates]; 

[FilesListTable insertRowsAtIndexes:[NSIndexSet indexSetWithIndex:[FilesArray count]-1] 
            withAnimation:NSTableViewAnimationSlideDown]; 

[FilesListTable endUpdates];